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

问题描述:

如果用户键入一个字符串,并且它包含@我想要将文本的颜色更改为红色.i已尝试使用textwatcher但得到堆栈溢出错误。我想更改颜色只有当@位于beginning.The代码如下在Android编辑文本中为特定文本设置文本颜色

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

您是否尝试过同样的逻辑之前,但与'onTextChanged',而不是'afterTextChanged' –

+0

@SakthiKumar相同的stackoverflow错误 – user1767260

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); 
} 

你必须除去叔在设置新文本以编辑文本之前,请使用extwatcher。 试试这个代码

  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); 

    } 
}; 

追加在行 的结束,使光标和设置文本空附加

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); 

     } 
    }); 
+0

它会好而光滑 –