转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/37913179
如题目所示,非常诡异的问题,EditText只能输入但是却不能删除!
解决办法参考:http://stackoverflow.com/questions/4886858/android-edittext-deletebackspace-key-event
- @Override
- public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
- return new ZanyInputConnection(super.onCreateInputConnection(outAttrs),true);
- }
- private class ZanyInputConnection extends InputConnectionWrapper {
- public ZanyInputConnection(InputConnection target, boolean mutable) {
- super(target, mutable);
- }
- @Override
- public boolean 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());
- }
- return false;
- }
- return super.sendKeyEvent(event);
- }
- }
原因是:onKeyListener只能监听硬键盘,
当发生软键盘事件的时候,会触发sendKeyEvent。
下面还有人补充说,在WebView中使用EditText的时候,也会有问题,还要重写一个deleteSurroundingText()方法:
- @Override
- public boolean deleteSurroundingText(int beforeLength, int afterLength) {
-
- if (beforeLength == 1 && afterLength == 0) {
-
- return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))
- && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
- }
- return super.deleteSurroundingText(beforeLength, afterLength);
- }
原话:It seems that backspace is not sent by an Android system unless it believes there is some text in the <textarea>.
参考:http://stackoverflow.com/questions/14560344/android-backspace-in-webview-baseinputconnection
今天才发现,是他妈的在底层注册了OnKeyListener,然后很霸气的直接返回了true。奇葩啊!