如果用户键入一个字符串并且它包含@我想将文本的颜色更改为red.i已尝试使用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>")));
}
}
});
答案 0 :(得分:2)
在将新文本设置为编辑文本之前,必须先删除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);
}
};
答案 1 :(得分:1)
if (s.toString().matches("(@\\w+)"))
{
topic.setTextColor(Color.parseColor("#ffff0000"));
}
答案 2 :(得分:0)
试试这个:
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>"));
}
}
});
答案 3 :(得分:0)
if(s.toString().startsWith("@"))
{
topic.setTextColor(Color.RED);
}
答案 4 :(得分:0)
追加到最后一行 并在附加
之前将text设置为nulledt_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);
}
});
答案 5 :(得分:0)
这是一个textWatcher Metod
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);
}
}
};
}