Android-EditText只能輸入不能刪除的問題
阿新 • • 發佈:2019-01-07
如題目所示,非常詭異的問題,EditText只能輸入但是卻不能刪除!
- @Override
- public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
- returnnew ZanyInputConnection(super.onCreateInputConnection(outAttrs),true);
- }
- privateclass ZanyInputConnection extends InputConnectionWrapper {
-
public
- super(target, mutable);
- }
- @Override
- publicboolean sendKeyEvent(KeyEvent event) {
-
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
- ClearEditTextView edit = ClearEditTextView.this;
- String text = edit.getText().toString();
- if(text.length() > 0){
- String newText = text.substring(0,text.length() - 1);
- edit.setText(newText);
-
Selection.setSelection(edit.getText(), newText.length());
- }
- returnfalse;
- }
- returnsuper.sendKeyEvent(event);
- }
- }
原因是:onKeyListener只能監聽硬鍵盤,當發生軟鍵盤事件的時候,會觸發sendKeyEvent。
下面還有人補充說,在WebView中使用EditText的時候,也會有問題,還要重寫一個deleteSurroundingText()方法:
- @Override
- publicboolean deleteSurroundingText(int beforeLength, int afterLength) {
- // magic: in latest Android, deleteSurroundingText(1, 0) will be called for backspace
- if (beforeLength == 1 && afterLength == 0) {
- // backspace
- returnsuper.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))
- && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
- }
- returnsuper.deleteSurroundingText(beforeLength, afterLength);
- }
今天才發現,是他媽的在底層註冊了OnKeyListener,然後很霸氣的直接返回了true。奇葩啊!