user3876059
user3876059

Reputation: 90

How to change text color while typing special word

on MultpuAutocompletTexView while Typing I want to make some special word that is start with @ want to make that word alone with some colour, how can I do this any help.

so when ever I type with @ that word should be in colour text.

like this imageenter image description here

Upvotes: 1

Views: 441

Answers (4)

Lovekush Vishwakarma
Lovekush Vishwakarma

Reputation: 3169

Use TextWatcher with Spanable text, and every time you need to check the last enter word, means the 0 index of last word is @, if YES then apply Spanable for EditText. please have a look on below code.

define this variable on public level

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);
                    }
                }
            }

Upvotes: 1

evals
evals

Reputation: 1869

this code to change color - use it in on text change listener like above (its kotlin you need to modify it to Java if you want to)

//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))

Upvotes: -1

Amir Hossein Mirzaei
Amir Hossein Mirzaei

Reputation: 2375

you should use combination of textWatcher and spannable text use text watcher to see what user is typing and use spannable text to give special color or format to part of your text in textView or EditText

good tutorial for spannable text :

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

and documentation for text watcher here :

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

Upvotes: 1

Planck Constant
Planck Constant

Reputation: 1524

You can add your own TextChangedListener and implement onTextChanged method

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) {

        }
    });

Upvotes: 0

Related Questions