androidandroid-edittextspannablestringbuilder

Android EditText change colour of a single word while typing (dynamically)


I have an edit text while typing inside edit text if the word starts with # that particular words color should change ,

i have implemented textwatcher and found that if text starts with # but do not know how to update the color dynamically ,

Have tried SpannableStringBuilder ssb = new SpannableStringBuilder(yourText) But its static , could anyone help me for dynamic implementation

Here is my code

myEditTxt.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) == '#') {
               //here i needs to update the typing text color
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

Solution

  • Finally found an answer and works as expected .

     private int intCount = 0, initialStringLength = 0;
    private String strText = "";
    

    on text changed

     @Override
            public void onTextChanged(CharSequence text, int start, int before, int count) {
    
                String strET = editText.getText().toString();
                String[] str = strET.split(" ");
                int cnt = 0;
                if (text.length() != initialStringLength && text.length() != 0) {
                    if (!strET.substring(strET.length() - 1).equals(" ")) {
                        initialStringLength = text.length();
                        cnt = intCount;
                        for (int i = 0; i < str.length; i++)
                            if (str[i].charAt(0) == '#')
                                strText = strText + " " + "<font color='#EE0000'>" + str[i] + "</font>";
                            else
                                strText = strText + " " + str[i];
                    }
                    if (intCount == cnt) {
                        intCount = str.length;
                        editText.setText(Html.fromHtml(strText));
                        editText.setSelection(textShareMemories.getText().toString().length());
                    }
                } else {
                    strText = "";
                }
    
            }