androidandroid-edittexthashtag

How to hashtag value in different colour in EditText?


I am writing some text in EditText when i write "#data" its colour should be changed but doesn't change how can i do. Please check the below EditText which i have used

<EditText
         android:id="@+id/et_simple"
         android:layout_height="wrap_content"
         android:layout_width="match_parent">
</EditText>

Solution

  • Hope this solution will help..!

    I used this solution it is very useful! like adding the textWatcher interface over your editText and listening to textChange and finding out if the word starts with a hashTag then call the Change The color method on that word! it has some flaws but those are ignorable see this simple one here.

    Spannable mspanable;
    int hashTagIsComing = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    
    
        final EditText edtTxtMine = (EditText) findViewById(R.id.editText1);
    
        mspanable = edtTxtMine.getText();
    
        edtTxtMine.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                String startChar = null;
    
                try{
                    startChar = Character.toString(s.charAt(start));
                    Log.i(getClass().getSimpleName(), "CHARACTER OF NEW WORD: " + startChar);
                }
                catch(Exception ex){
                    startChar = "";
                }
    
                    if (startChar.equals("#")) {
                         changeTheColor(s.toString().substring(start), start, start + count);
                         hashTagIsComing++;
                    }
    
                    if(startChar.equals(" ")){
                        hashTagIsComing = 0;
                    }
    
                    if(hashTagIsComing != 0) {
                        changeTheColor(s.toString().substring(start), start, start + count);
                        hashTagIsComing++;
                    }
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    
            }
        });
    
    
    
    }
    
    
    private void changeTheColor(String s, int start, int end) {
        mspanable.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.color)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }