我正在尝试实现一些类似于代码编辑器的东西,其中关键字会自动高亮显示。我将有一个字符串数组,当用户键入文本并匹配字符串数组中的字符串时,我想更改edittext字符串的颜色和字体。我正在使用addtextchangelistener,但是整个edittext的文本发生了变化。我只想突出显示匹配的单词。我知道我必须使用可扩展字符串,但代码崩溃了。有人能帮我正确使用addtextchangedlistener()的可启用字符串吗?这是我的密码:
editText.addTextChangedListener(new TextWatcher() {
private SpannableString spanString;
private ForegroundColorSpan span;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
spanString = new SpannableString(s);
span = new ForegroundColorSpan(Color.YELLOW);
spanString.setSpan(span, start, start + count, 0);
}
@Override
public void afterTextChanged(Editable s) {
int beginIdx = spanString.getSpanStart(s);
int endIdx = spanString.getSpanEnd(s);
if(s.subSequence(beginIdx, endIdx).equals("for"))
{
editText.setText(spanString, EditText.BufferType.SPANNABLE);
}
spanString.removeSpan(span);
span = null;
spanString = null;
}
});
3条答案
按热度按时间ijxebb2r1#
试试这个,询问任何问题。您可以更改任何文本的颜色,只需将“for”替换为所需的文本并替换颜色-
sigwle7e2#
通过呼叫
editText.setTextColor(getResources().getColor(R.color.indigo));
您正在设置整个文本的颜色。您必须设置关键字范围的颜色(在本例中为“for”关键字)。为此,您必须知道关键字在字符串中的位置(关键字的起始索引和结束索引)。然后可以这样设置。
因为设置一个span需要调用一个settext,所以还要注意,您需要防止无限循环。。。
s1ag04yj3#
我知道你在尝试创建ide。要突出显示代码的语法,您应该使用spannable string或使用任何库来简化它。此外,您可以尝试以下代码:
然后我为edittext添加了一个textwatcher。在aftertextchanged方法中,我使用以下代码为每个关键字设置颜色,