I have an EditText implements TextWatcher but have a problem with Backspace key. The first 5 characters are clear one by one when hold on backspace, but the last 5 characters that convert to image cannot clear one by one when hold on backspace.
Look the image :
MainActivity.java
public class MainActivity extends AppCompatActivity { Spannable.Factory spannableFactory; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spannableFactory = Spannable.Factory .getInstance(); final EditText editText = (EditText) findViewById(R.id.editText); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { editText.removeTextChangedListener(this); if (s.length() >= 5) { editText.setText(getTextToIcon(getApplicationContext(), s)); } if(count!=0){ // != key delete if (s.length() - 1 > start) { editText.setSelection(start + 1); } else { editText.setSelection(s.length()); } }else{ // = key delete editText.setSelection(start); } editText.addTextChangedListener(this); } @Override public void afterTextChanged(Editable s) {} }); } public Spannable getTextToIcon(Context context, CharSequence text) { StringBuilder stringBuilder = new StringBuilder(text); Spannable spannable = spannableFactory.newSpannable(stringBuilder); int index = text.length() - 1; for(int i = 5; i<=index; i++){ spannable.setSpan(new ImageSpan(context, android.R.drawable.star_on), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return spannable; } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLength="10" android:inputType="number" /> </LinearLayout>