在Android中更改跨度内的文本时删除跨度

And*_*rea 10 html java android

让我说我这样发表评论:嗨Andrea检查出来......在那个评论中我想强调Andrea,但每当我改变Andrea的值或者当我删除单词的一个字符时,span会改变,问题是我正在使用spannableString.setSpan(new StyleSpan(Typeface.BOLD), indexOfAt, highlightName.length() + indexOfAt, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE),它Spanned.SPAN_EXCLUSIVE_EXCLUSIVE接受中间的单词和删除单词,如何在用户更改单词或删除单词的字符时删除跨度?

Far*_*ahi 3

您需要注意编辑文本上的文本更改。假设EditText您正在使用的 被命名为commentEditText

 commentEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                String comment = editable.toString();
                if (comment.indexOf('@') != -1) {
                    //Asumming the name string
                    String name = "Andrea";
                    int atIndex = comment.indexOf('@');
                    int endIndex = atIndex + name.length() + 1;
                    if (endIndex == -1 || endIndex > editable.length()) {
                        endIndex = editable.length();
                    }
                    if (comment.toLowerCase().contains(name.toLowerCase())) {
                        editable.setSpan(new StyleSpan(Typeface.BOLD), atIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                    } else {
                        StyleSpan[] spannable = editable.getSpans(atIndex, endIndex, StyleSpan.class);
                        if (spannable != null && spannable.length > 0) {
                            for (int i = 0; i < spannable.length; i++) {
                                editable.removeSpan(spannable[i]);
                            }
                        }

                    }
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)