Android-EditText只能输入不能删除的问题

转载请标明出处: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) {       
    // magic: in latest Android, deleteSurroundingText(1, 0) will be called for backspace
    if (beforeLength == 1 && afterLength == 0) {
        // backspace
        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。奇葩啊!





版权声明:本文为goldenfish1919原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。