Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 每次更改文本时,我都要突出显示MutiAutoCompleteTextView的语法_Android_Textwatcher - Fatal编程技术网

Android 每次更改文本时,我都要突出显示MutiAutoCompleteTextView的语法

Android 每次更改文本时,我都要突出显示MutiAutoCompleteTextView的语法,android,textwatcher,Android,Textwatcher,**我想在每次文本更改时突出显示MutiAutoCompleteTextView的语法,我已经尝试过了,但我的应用程序在运行时冻结,请帮助我如何做到这一点** MultiAutoCompleteTextView Code; TextHighlighter Highlighter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se

**我想在每次文本更改时突出显示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 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;
        }
    }        
};

但是我输入的每个新字符或单词的光标都会被重置。看一看,太棒了!!非常感谢。