Android 每次更改文本时,我都要突出显示MutiAutoCompleteTextView的语法
**我想在每次文本更改时突出显示MutiAutoCompleteTextView的语法,我已经尝试过了,但我的应用程序在运行时冻结,请帮助我如何做到这一点**Android 每次更改文本时,我都要突出显示MutiAutoCompleteTextView的语法,android,textwatcher,Android,Textwatcher,**我想在每次文本更改时突出显示MutiAutoCompleteTextView的语法,我已经尝试过了,但我的应用程序在运行时冻结,请帮助我如何做到这一点** MultiAutoCompleteTextView Code; TextHighlighter Highlighter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se
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 p2, int p3, 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))设置文本时代码>您的后文本更改
将立即调用。所以它将作为无限循环运行。您可以使用标志控制此流
例如:
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 p2, int p3, 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;
}
}
};
但是我输入的每个新字符或单词的光标都会被重置。看一看,太棒了!!非常感谢。