2011-11-07 48 views
1

預先感謝您的任何回覆。Android:EditText中不同字符的不同顏色

我想有一個EditText在我這有不同的角色不同的顏色,其在輸入Android應用程序。

對於例如字母「A」應該總是藍色的,字母「B」應該總是綠色的......等等。

到目前爲止,我一直無法找到解決方案。 請友善地指導我正確的方向。

回答

7

正如所指出的那樣,您可以將Spannables應用到輸入的文本中。事情是這樣的:

colorEdit.addTextChangedListener(new TextWatcher() { 

    String lastText = null; 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
     Log.d("", "lastText='" + lastText + "'"); 
     Log.d("", "s='" + s + "'"); 
     if (!s.toString().equals(lastText)) { 
      lastText = s.toString(); 

      String res = ""; 
      char[] split = s.toString().toCharArray(); 
      for (char c : split) { 
       String color = null; 
       if (c == 'a') { 
        color = "red"; 
       } else if (c == 'b') { 
        color = "green"; 
       } else if (c == 'c') { 
        color = "blue"; 
       } 
       // etc... 
       if (color != null) { 
        res += "<font color=\"" + color + "\">" + c 
          + "</font>"; 
       } else { 
        res += c; 
       } 
      } 
      int selectStart = colorEdit.getSelectionStart(); 
      int selectEnd = colorEdit.getSelectionEnd(); 
      colorEdit.setText(Html.fromHtml(res)); 
      colorEdit.setSelection(selectStart, selectEnd); 
     } 
    } 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    @Override 
    public void afterTextChanged(Editable s) {} 
}); 

一些要注意的事情,我叫setText這當然會導致onTextChanged再次運行,所以我檢查文本實際上改變。此外,光標位置沒有正確保存,所以我保存並恢復。

0

你最好的拍攝可能是壓倒性的EditText和寫你自己的draw()。但這種方式就是瘋狂,因爲它通常是重寫內置視圖類。

+0

我開始懷疑,這樣做你說的可能是我唯一的選擇。不過,我也在考慮將onClick監聽器添加到EditText小部件的虛擬圖像,然後使用輸入文本替換具有自設計字符圖像的字符。有沒有想過這件事,但我認爲它可以作爲最後的手段/或你的解決方案(這是正確的方式,但是,瘋狂)做這項工作。 – Heartache