2015-11-19 200 views
0

我正在嘗試爲我的應用程序製作一個功能,用戶可以在其中進行粗體選擇,但我也希望這樣做,以便如果所選文字已經是粗體,那麼文本應該再次設置爲正常,這是一種撤銷功能。從Edittext粗體和非粗體中製作選定的文字

我已經嘗試了超過100種組合而沒有任何成功!

CharacterStyle csBold = new StyleSpan(Typeface.BOLD); 
    CharacterStyle csNormal = new StyleSpan(Typeface.NORMAL); 
    int start = editText.getSelectionStart(); 
    int end = editText.getSelectionEnd(); 
    SpannableStringBuilder ssb = new SpannableStringBuilder(editText.getText()); 
    ssb.setSpan(csBold, start, end, 1); 
    SpannableStringBuilder ssb2 = new SpannableStringBuilder(editText.getText()); 
    ssb2.setSpan(csNormal, start, end, 1); 



    switch(item.getItemId()) { 

     case R.id.bold: 

      while(editText.isSelected()){ 

      if(editText.getSelectionStart() + editText.getSelectionEnd() == ssb.getSpanStart(start) + ssb.getSpanEnd(end)){ 
       editText.setText(ssb2); 
       return true; 

      }else{ 
       editText.setText(ssb); 
       return true; 

      } 

      } 
+0

問題已經解決,原來的解決方案可以在這裏找到:http://stackoverflow.com/a/ 33835506/5366495 – Muddz

回答

1

更新應答

Edittext editext; 
    Button bold_btn , normal_btn , itlac; 
    CharacterStyle styleBold , styleItalc; 
    boolean bold = false; 

     @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 

       setContentView(R.layout.activity_main); 
       styleBold = new StyleSpan(Typeface.BOLD); 
       styleNormal = new StyleSpan(Typeface.NORMAL); 
       styleItalc = new StyleSpan(Typeface.ITALIC); 
       underLine = new UnderlineSpan(); 
       editext = (Editext) findViewById(R.id.editext); 
       bold_btn = (Button) findViewById(R.id.button1); 
       italic_btn = (Button) findViewById(R.id.button2); 
       italic_btn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
      String wholeText = username.getText().toString(); 
      int start = username.getSelectionStart(); 
      int end = username.getSelectionEnd(); 

      SpannableStringBuilder sb = new SpannableStringBuilder(wholeText); 

      sb.setSpan(styleItalic, start, end, 0); 
      username.setText(sb); 
     } 
    }); 
       ........ 
       ..... 
       bold_btn.setOnClickListener(BoldbuttonListener); 
       normal_btn.setOnClickListener(normalbuttonListener); 


    } 



      View.OnClickListener BoldbuttonListener = new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 


         bold = !bold; 

     String wholeText = username.getText().toString(); 
     int start = username.getSelectionStart(); 
     int end = username.getSelectionEnd(); 

     CharacterStyle passedStyle; 
     SpannableStringBuilder sb = new SpannableStringBuilder(wholeText); 
     if(bold) { 
      passedStyle = styleNormal; 


     }else { 
      passedStyle = styleBold; 

     } 
     sb.setSpan(passedStyle, start, end, 0); 
     editext.setText(sb); 


        } 
       }; 

相同的正常效果

+0

但我也會爲斜體,下劃線,中風等功能。所以然後我必須爲每個功能做一個「正常」按鈕。 讓我們假裝我做了一個粗體和斜體的句子,現在我想刪除斜體效果,最好的辦法是再次按下斜體按鈕,就像Office字樣。 – Muddz

+0

好的我會更新我的答案 –

+0

我不需要任何正常的按鈕。唯一必須在那裏的按鈕是粗體,斜體和下劃線。如果選定的文本已經是粗體,那麼如果再按一下粗體,它應該使選定的部分正常。如果認爲你誤解了我 – Muddz