![](/img/trans.png)
[英]How to use spannable strings in addTextChangedListener to change color of editText substring?
[英]Using SpannableString with an EditText to change substring color
我正在尝试在 Android Studio 中制作代码编辑器。 当我需要更改单个关键字的颜色时(例如if
、 while
、 int
等),我有点卡住了。
到目前为止,我已经尝试过使用 SpannableString,但它似乎不适用于 EditText。 该应用程序运行并全部运行,但是一旦我输入if
,它就会冻结,我必须重新启动。 没有 logcat 异常。
这是我的代码:
EditText editText = findViewById(R.id.iftext);
Keywords keys = new Keywords();
editText.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) {
if(editText.getText().toString().contains(keys.iff())){
String r = editText.getText().toString();
int index = r.indexOf(editText.getText().toString().indexOf(keys.iff()));
SpannableString spannableString = new SpannableString(r);
spannableString.setSpan(new ForegroundColorSpan(Color.RED), index , index, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(spannableString);
}
}
@Override
public void afterTextChanged(Editable s) {
}
keys.iff()
方法只返回一个字符串“if”
我不确定索引,所以我尝试了“0”和“1”常量,但它仍然冻结。
您已将TextWatcher
添加到editText
。 因此,每当您为editText
键入或设置字符时,它都会在onTextChanged
中通知。
第一次,您键入if
关键字,然后代码流进入 if 条件。
editText.setText(spannableString);
此行将再次导致 textWatcher 在 onTextChanged 中通知。 它会创建无限循环。 所以您的应用程序挂起或 ANR。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.