繁体   English   中英

使用带有 EditText 的 SpannableString 更改 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ 颜色

[英]Using SpannableString with an EditText to change substring color

我正在尝试在 Android Studio 中制作代码编辑器。 当我需要更改单个关键字的颜色时(例如ifwhileint等),我有点卡住了。

到目前为止,我已经尝试过使用 SpannableString,但它似乎不适用于 EditText。 该应用程序运行并全部运行,但是一旦我输入if ,它就会冻结,我必须重新启动。 没有 logcat 异常。

这是我的代码:

    EditText editText = findViewById(R.id.iftext);

    Keywords keys = new Keywords();

    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(editText.getText().toString().contains(keys.iff())){

                String r = editText.getText().toString();
                int index = r.indexOf(editText.getText().toString().indexOf(keys.iff()));

                SpannableString spannableString = new SpannableString(r);
                spannableString.setSpan(new ForegroundColorSpan(Color.RED), index , index, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

                editText.setText(spannableString);
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }

keys.iff()方法只返回一个字符串“if”

我不确定索引,所以我尝试了“0”和“1”常量,但它仍然冻结。

您已将TextWatcher添加到editText 因此,每当您为editText键入或设置字符时,它都会在onTextChanged中通知。

第一次,您键入if关键字,然后代码流进入 if 条件。

editText.setText(spannableString); 此行将再次导致 textWatcher 在 onTextChanged 中通知。 它会创建无限循环。 所以您的应用程序挂起或 ANR。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM