【问题标题】:I want to highlight the syntax of my MutiAutoCompleteTextView for each time text is changed我想在每次更改文本时突出显示 MultiAutoCompleteTextView 的语法
【发布时间】:2020-09-25 04:13:04
【问题描述】:

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

}

【问题讨论】:

    标签: android textwatcher


    【解决方案1】:

    您的应用程序冻结,因为当您使用 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 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;
            }
        }        
    };
    

    【讨论】:

    猜你喜欢
    • 2013-10-28
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2023-03-20
    • 2013-04-16
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多