如何在键入特殊单词时更改文本颜色

时间:2018-06-15 16:15:43

标签: android

在MultpuAutocompletTexView上打字时我想制作一些以@开头的特殊单词,想要用一些颜色单独制作这个单词,我该怎么做才能做到这一点。

因此,当我输入@时,该单词应为彩色文本。

喜欢此图片enter image description here

4 个答案:

答案 0 :(得分:1)

您应该使用textWatcher和spannable文本的组合 使用文本观察器查看用户正在键入的内容并使用spannable text为textView或EditText中的部分文本提供特殊颜色或格式

可扩展文本的好教程:

https://medium.com/google-developers/spantastic-text-styling-with-spans-17b0c16b4568

和文本观察者的文档:

https://developer.android.com/reference/android/widget/TextView.html#addTextChangedListener(android.text.TextWatcher)

答案 1 :(得分:1)

将TextWatcher与Spanable文本一起使用,每次需要检查最后一个输入单词时,表示最后一个单词的0索引为@,如果是,则为EditText应用Spanable。 请看下面的代码。

在公共级别定义此变量

int beforeChangeSize = 0, afterChangeSize = 0, cusrsorPos = 0, posOflastSpace = 0;
String lastcursorSubString = "";


 @Override
            public void afterTextChanged(Editable editable) {

                if (afterChangeSize > beforeChangeSize) {
                    cusrsorPos = 0;
                    posOflastSpace = 0;
                    lastcursorSubString = "";

                    cusrsorPos = txt_search.getSelectionStart();
                    String sudString = txt_search.getText().toString().substring(0, cusrsorPos);
                    posOflastSpace = sudString.lastIndexOf(" ");
                    posOflastSpace = (posOflastSpace == -1) ? 0 : posOflastSpace;
                    lastcursorSubString = sudString.substring(posOflastSpace, cusrsorPos).trim();

                    if ((lastcursorSubString.length() > 1 &&(lastcursorSubString.charAt(0) == '@') {
                        textlable.setText(""+lastcursorSubString);
                       // txt_search.getText().replace(posOflastSpace+1, cusrsorPos, Html.fromHtml("<font color=#FE642E>" + lastcursorSubString + "</font>"));
                     //   txt_search.showDropDown();

                        editable.setSpan(new ForegroundColorSpan(Color.RED),
                                posOflastSpace+1,
                                cusrsorPos,
                                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                    }
                }
            }

答案 2 :(得分:0)

您可以添加自己的TextChangedListener并实施onTextChanged方法

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

        }

        @Override
        public void onTextChanged(CharSequence text, int start, int before, int count) {

           if (text.charAt(start) == '@') {
               //change color
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

答案 3 :(得分:-1)

此代码更改颜色 - 在上面的文本更改侦听器中使用它(如果你愿意,你需要将它的kotlin修改为Java)

//get text
    val str = editText.text.toString()
    //get last word
    val splitStr = str.trim { it <= ' ' }.split("\\s+".toRegex()).dropLastWhile { 
it.isEmpty() }.toTypedArray()
    val ColorWord = splitStr.last()
    //get the sentence without the last word
    val textButLast = str.substring(0, str.lastIndexOf(" "))
    //change the last word color
    val LastWord = "<font color='#EE0000'>$ColorWord</font>"
    //put the last word with the sentence again
    editText.setText(Html.fromHtml(textButLast + LastWord))