私はEditTextにTextWatcherを実装していますが、Backspaceキーに問題があります。 バックスペースを保持すると、最初の5文字は1つずつクリアされますが、バックスペースを保持すると、イメージに変換された最後の5文字は1つずつクリアできません。バックスペースを保持するとテキストが1つずつクリアされない
は画像を見て:
<?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>
activity_main.xml
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; } }
を
テキストをアイコンに変換するので、それをバックスペースで消去することはできません。アイコンを消去してバックスペース上のアイコンからテキストに戻して変換する必要があります。 – Vickyexpert
@Vickyexpert:バックスペースを1つずつ押してクリアテキストを1つずつクリアすることができますが、バックスペースを保持すると1つずつクリアされません。 –
私はそれがアイコンに変換するためではないと思う、私はアイコンに変換していない別の方法を使用するため、それも動作しません。 –