在Android Edittext中为特定文本设置文本颜色



如果用户键入一个字符串,其中包含@,我想将文本的颜色更改为红色。我尝试过使用textwatcher,但出现堆栈溢出错误。只有当@在开头时,我才想更改颜色。下方给出了代码

topic.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) {
            
            if (s.toString().matches("(@\w+)")) {
                topic.setText(Html.fromHtml(s.toString().replaceAll(
                        "(@\w+)", "<font color='#ffff0000'>$1</font>")));
            }
            
        }
    });

在将新文本设置为编辑文本之前,必须删除textwatcher。试试这个代码

           private TextWatcher textWatcher = new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }
    @Override
    public void afterTextChanged(Editable s) {
        editText.removeTextChangedListener(this);
        String text = editText.getText().toString();
         if (text .matches("(@\w+)")) {
            editText.setText(Html.fromHtml(text .replaceAll(
                    "(@\w+)", "<font color='#ffff0000'>$1</font>")));
        }
        editText.addTextChangedListener(this);
    }
};
if (s.toString().matches("(@\w+)")) 
{
      topic.setTextColor(Color.parseColor("#ffff0000"));
}

试试这个:

topic.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) {
        if (s.toString().startsWith("@")) {
            topic.setText(
                Html.fromHtml("<font color='#ffff0000'>"+
                s.toString().substring(1)
                +"</font>"));
        }

    }
});
if(s.toString().startsWith("@"))
{
   topic.setTextColor(Color.RED);
}

在行尾追加curser并在附加之前将文本设置为空

edt_customer_cc.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }
        @Override
        public void afterTextChanged(Editable s) {
            edt_customer_cc.removeTextChangedListener(this);
            String text = edt_customer_cc.getText().toString();
            if (text .contains(";")) {
                edt_customer_cc.setText("");
                // append to bring curser at end of line
                edt_customer_cc.append(Html.fromHtml(text.replaceAll(
                        "(\;)", "<font color='#ff0000'>;</font>")));

            }
            //editText.setText(text);
            //editText.setSelection(text.length());
            edt_customer_cc.addTextChangedListener(this);
        }
    });

这是一个textWatcher方法

public TextWatcher textWatcher(final EditText editText) {
    return new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
         if ("@".equals(s.substring(0, 1))) {
               editText.setTextColor(Color.RED);
            }    
        }
    };
}

相关内容

  • 没有找到相关文章

最新更新