【发布时间】:2016-10-14 14:13:54
【问题描述】:
我有一个 EditText 实现了 TextWatcher,但 Backspace 键有问题。 前5个字符长按退格时一个一个清除,但转换成图像的后5个字符按退格时不能一个一个清除。
看图:
-
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>
【问题讨论】:
-
-
@Vickyexpert :我可以通过按退格键一个一个地清除它并一个一个地清除文本,但是当我按住退格键时,文本不会一个一个地清除。
-
我觉得不是转成icon的原因,因为我用了另一种方法,没有转成icon,也没有用。
-
那么我认为你需要处理长按退格键,首先做一件事按住另一个键如“1”或“2”并检查它是否工作正常然后检查退格键
-
@JohnWatsonDev:非常感谢。但是
getTextToIcon在底部,你看不到吗?
标签: android android-edittext backspace