如何解决每当文本更改时,我想突出显示MutiAutoCompleteTextView的语法
**我想在每次更改文本时突出显示MutiAutoCompleteTextView的语法,我已经尝试过此方法,但是我的应用程序在运行时冻结,请帮助我如何做到这一点。 **
MultiAutoCompleteTextView Code;
TextHighlighter Highlighter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Code = findViewById(R.id.Code);
Highlighter = new TextHighlighter();
Highlighter.setLanguage(Highlighter.JAVA);
String text=Highlighter.getHighlightedText(Code.getText().toString());
Code.setText(Html.fromHtml(text));
Code.addTextChangedListener(TextWatcher);
}
private TextWatcher TextWatcher = new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence p1,int p2,int p3,int p4)
{
// Todo: Implement this method
}
@Override
public void onTextChanged(CharSequence p1,int p4)
{
// Todo: Implement this method
}
@Override
public void afterTextChanged(Editable p1)
{
if(Code.length() !=0)
{
String text=Highlighter.getHighlightedText(Code.getText().toString());
Code.setText(Html.fromHtml(text));
}
}
};
}
解决方法
您的应用程序冻结,因为当您使用Code.setText(Html.fromHtml(text));
设置文本时,您的afterTextChanged
将立即被调用。因此它将作为无限循环运行。您可以使用标志来控制此流程。
例如:
boolean isHighlighted = false;
private TextWatcher TextWatcher = new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence p1,int p2,int p3,int p4)
{
}
@Override
public void onTextChanged(CharSequence p1,int p4)
{
// TODO: Implement this method
}
@Override
public void afterTextChanged(Editable p1)
{
String text=Highlighter.getHighlightedText(Code.getText().toString());
if(Code.length() !=0 && !isHighlighted)
{
isHighlighted == true;
Code.setText(Html.fromHtml(text));
//setText will resets cursor position,so you have to move the cursor to the end.
Code.setSelection(text.length)
} else {
isHighlighted = false;
}
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。