2015-11-02 54 views
0

我嘗試做像Office或谷歌文檔可以輸入不同的字大小此功能如何顯示不同大小的字,如Office或谷歌文檔的功能在Android的

這裏是我的代碼

input =(EditText)findViewById(R.id.Input_EditText); 
input.addTextChangedListener(new TextWatcher() 
{ 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {  
    } 
    public void afterTextChanged(Editable s) 
    { 
     int index = input.getSelectionEnd(); 
     String nowstr; 

     if(index==0) 
     { 
      //do nothing 
     } 
     else 
     { 
      nowstr = s.toString(); 
      char nowstr_array[] = nowstr.toCharArray(); 
      show_input = String.valueOf(nowstr_array[index-1]); 

      SpannableStringBuilder spann = new SpannableStringBuilder(show_input); 
      AbsoluteSizeSpan word_size = new AbsoluteSizeSpan(40,true); 
      spann.setSpan(word_size, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      input.getText().insert(index, spann); 
     } 
    } 
}); 

但這個程序會崩潰......

然後,我嘗試做

Toast.makeText(MainActivity.this, spann, Toast.LENGTH_SHORT).show(); 
//input.getText().insert(index, spann); 

但是這樣做可以顯示...

這是爲什麼?

回答

0
public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      beforeText = s.toString() ; 
     } 

     public void afterTextChanged(Editable s) { 
      int index = input.getSelectionEnd(); 
      String nowstr; 

      if (index == 0) { 
       // do nothing 
      } else { 
       if (beforeText.length() < s.toString().length()) { 
        nowstr = s.toString(); 
        char nowstr_array[] = nowstr.toCharArray(); 
        String show_input = String.valueOf(nowstr_array[index - 1]); 

        SpannableStringBuilder spann = new SpannableStringBuilder(
          show_input); 
        AbsoluteSizeSpan word_size = new AbsoluteSizeSpan(40, true); 
        spann.setSpan(word_size, 0, 1, 
          Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
        input.removeTextChangedListener(this) ; 
        input.getText().replace(index-1, index, spann) ; 
        input.addTextChangedListener(this) ; 

       } 
      } 
     } 

    }); 

beforeText是一個全局變量

+0

我很成功,非常感謝 –

1

因爲在方法aftertextchanged你得到的文本和改變文本大小,最後你插入文本到edittext,但該方法將導致textWatcher偵聽器,然後將運行aftertextchanged,並且在這種方法中,你也改變文本,所以這是一個死循環,但如果你使用敬酒,它不會插入文本則不會引起聽衆,那麼它的工作原理:)

+0

讓我們[繼續這個討論在聊天](http://chat.stackoverflow.com/rooms/94047/discussion-between-ljl5241861-and-ban-lin)。 – ljl5241861

+0

評論不適用於擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/94104/discussion-on-answer-by-ljl5241861-how-to-display-words-of-different-sizes-such) 。 –

0

首先,屏幕顯示以下

enter image description here

Word將再次出現小而大的話,此時並不是我想要的,我只是想要一個足夠大的

然後我按下刪除鍵,程序會崩潰

這裏是我的代碼:

SpannableStringBuilder spann = new SpannableStringBuilder(show_input); 
spann.setSpan(new AbsoluteSizeSpan(40,true), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
Toast.makeText(MainActivity.this, Integer.toString(index), Toast.LENGTH_SHORT).show(); 
input.removeTextChangedListener(this) ; 
input.getText().insert(index, spann); 
input.addTextChangedListener(this) ; 
相關問題