Android:EditText中不同字符的不同颜色

Hea*_*che 1 android android-edittext

提前感谢您的任何回复.

我想在我的Android应用程序中创建一个EditText,它为输入的不同字符设置了不同的颜色.

例如,字母"A"应始终为蓝色,字母"b"应始终为绿色......依此类推.

到目前为止,我无法找到解决方案.请善意指导我正确的方向.

Cra*_*igy 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) {}
});
Run Code Online (Sandbox Code Playgroud)

有些事情需要注意,我称之为setText导致onTextChanged再次运行的原因,所以我检查文本实际上已经改变了.此外,光标位置未正确保存,因此我也存储和恢复它.