Android-如何解析Textview并在某些字符上添加可扩展字符?

Android-如何解析Textview并在某些字符上添加可扩展字符?,android,textview,spannable,Android,Textview,Spannable,我正在开发一个计算器应用程序,我想用不同的颜色显示+-/*等符号。我使用文本视图作为我的显示器 我能做到这一点时,按钮被按下与这样的代码 coloredOperator = "<font color=#BED505>"+buttonPressed+"</font>"; textView.append(Html.fromHtml(coloredOperator)); 问题是,很明显,最后一个函数剥夺了我的文本视图中所有的可扩展项,从而失去了风格 是否有任何方法可以解析文

我正在开发一个计算器应用程序,我想用不同的颜色显示+-/*等符号。我使用文本视图作为我的显示器

我能做到这一点时,按钮被按下与这样的代码

coloredOperator = "<font color=#BED505>"+buttonPressed+"</font>";

textView.append(Html.fromHtml(coloredOperator));
问题是,很明显,最后一个函数剥夺了我的文本视图中所有的可扩展项,从而失去了风格

是否有任何方法可以解析文本以查找特殊字符,添加相应的spannable,然后使用.setText()

或者你对如何实现我所追求的目标还有其他想法吗

谢谢

正确答案适用于这个问题

////////////

 public class SpanTest extends Activity {

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         String dispStr = "This has the string ABCDEF in it \nSo does this :ABCDEF - see!\nAnd again ABCD here";
         TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setText(dispStr);
        changeTextinView(tv, "ABC", Color.RED);
    }

     private void changeTextinView(TextView tv, String target, int colour) {
         String vString = (String) tv.getText();
         int startSpan = 0, endSpan = 0;
         Spannable spanRange = new SpannableString(vString);

         while (true) {
             startSpan = vString.indexOf(target, endSpan);
             ForegroundColorSpan foreColour = new ForegroundColorSpan(colour);
             // Need a NEW span object every loop, else it just moves the span
             if (startSpan < 0)
                 break;
             endSpan = startSpan + target.length();
             spanRange.setSpan(foreColour, startSpan, endSpan,
                     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        tv.setText(spanRange);
    }
}
public类测试扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String dispStr=“这里面有字符串ABCDEF\n这样做:ABCDEF-请参阅!\n然后再次单击此处”;
TextView tv=(TextView)findViewById(R.id.textView1);
tv.setText(dispStr);
更改文本视图(电视,“ABC”,颜色为红色);
}
私有void changeTextinView(文本视图电视、字符串目标、int颜色){
String vString=(String)tv.getText();
int startSpan=0,endSpan=0;
Spannable spanRange=新SpannableString(vString);
while(true){
startSpan=vString.indexOf(target,endSpan);
ForegroundColorSpan foreColour=新的ForegroundColorSpan(颜色);
//每个循环都需要一个新的跨度对象,否则它只会移动跨度
如果(起始跨距<0)
打破
endSpan=startSpan+target.length();
跨距范围。设置跨距(前幅、起始跨距、结束跨距、,
Spannable.SPAN_独占性SPAN_独占性);
}
tv.setText(spanRange);
}
}
正确答案适用于此问题。
 public class SpanTest extends Activity {

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         String dispStr = "This has the string ABCDEF in it \nSo does this :ABCDEF - see!\nAnd again ABCD here";
         TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setText(dispStr);
        changeTextinView(tv, "ABC", Color.RED);
    }

     private void changeTextinView(TextView tv, String target, int colour) {
         String vString = (String) tv.getText();
         int startSpan = 0, endSpan = 0;
         Spannable spanRange = new SpannableString(vString);

         while (true) {
             startSpan = vString.indexOf(target, endSpan);
             ForegroundColorSpan foreColour = new ForegroundColorSpan(colour);
             // Need a NEW span object every loop, else it just moves the span
             if (startSpan < 0)
                 break;
             endSpan = startSpan + target.length();
             spanRange.setSpan(foreColour, startSpan, endSpan,
                     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        tv.setText(spanRange);
    }
}