預先感謝您的任何回覆。Android:EditText中不同字符的不同顏色
我想有一個EditText在我這有不同的角色不同的顏色,其在輸入Android應用程序。
對於例如字母「A」應該總是藍色的,字母「B」應該總是綠色的......等等。
到目前爲止,我一直無法找到解決方案。 請友善地指導我正確的方向。
預先感謝您的任何回覆。Android:EditText中不同字符的不同顏色
我想有一個EditText在我這有不同的角色不同的顏色,其在輸入Android應用程序。
對於例如字母「A」應該總是藍色的,字母「B」應該總是綠色的......等等。
到目前爲止,我一直無法找到解決方案。 請友善地指導我正確的方向。
正如所指出的那樣,您可以將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
再次運行,所以我檢查文本實際上改變。此外,光標位置沒有正確保存,所以我保存並恢復。
你最好的拍攝可能是壓倒性的EditText
和寫你自己的draw()
。但這種方式就是瘋狂,因爲它通常是重寫內置視圖類。
您可能想要將每個字母包裝在其自己的ForegroundColorSpan中。添加TextWatcher並在編輯文本時應用Spannables。
如果我是你,我最好使用InputFilter
。 setText()
在textWatcher{} onTextChange()
有一些問題(例如,在軟鍵盤上,您不能選擇國家級信函)。
我開始懷疑,這樣做你說的可能是我唯一的選擇。不過,我也在考慮將onClick監聽器添加到EditText小部件的虛擬圖像,然後使用輸入文本替換具有自設計字符圖像的字符。有沒有想過這件事,但我認爲它可以作爲最後的手段/或你的解決方案(這是正確的方式,但是,瘋狂)做這項工作。 – Heartache