1. 程式人生 > >Android-EditText只能輸入不能刪除的問題

Android-EditText只能輸入不能刪除的問題

如題目所示,非常詭異的問題,EditText只能輸入但是卻不能刪除!

  1. @Override
  2.     public InputConnection onCreateInputConnection(EditorInfo outAttrs) {  
  3.         returnnew ZanyInputConnection(super.onCreateInputConnection(outAttrs),true);  
  4.     }  
  5.     privateclass ZanyInputConnection extends InputConnectionWrapper {  
  6.         public
     ZanyInputConnection(InputConnection target, boolean mutable) {  
  7.             super(target, mutable);  
  8.         }  
  9.         @Override
  10.         publicboolean sendKeyEvent(KeyEvent event) {  
  11.             if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {  
  12.                 ClearEditTextView edit = ClearEditTextView.this;  
  13.                 String text = edit.getText().toString();  
  14.                 if(text.length() > 0){  
  15.                     String newText = text.substring(0,text.length() - 1);  
  16.                     edit.setText(newText);  
  17.                     Selection.setSelection(edit.getText(), newText.length());  
  18.                 }  
  19.                 returnfalse;  
  20.             }  
  21.             returnsuper.sendKeyEvent(event);  
  22.         }  
  23.     }  

原因是:onKeyListener只能監聽硬鍵盤,當發生軟鍵盤事件的時候,會觸發sendKeyEvent。

下面還有人補充說,在WebView中使用EditText的時候,也會有問題,還要重寫一個deleteSurroundingText()方法:

  1. @Override
  2. publicboolean deleteSurroundingText(int beforeLength, int afterLength) {         
  3.     // magic: in latest Android, deleteSurroundingText(1, 0) will be called for backspace
  4.     if (beforeLength == 1 && afterLength == 0) {  
  5.         // backspace
  6.         returnsuper.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))  
  7.             && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));  
  8.     }  
  9.     returnsuper.deleteSurroundingText(beforeLength, afterLength);  
  10. }  
原話:It seems that backspace is not sent by an Android system unless it believes there is some text in the <textarea>.

今天才發現,是他媽的在底層註冊了OnKeyListener,然後很霸氣的直接返回了true。奇葩啊!