您的位置:首页 > 移动开发 > Android开发

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

2017-01-17 16:42 555 查看
转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/37913179
如题目所示,非常诡异的问题,EditText只能输入但是却不能删除!
解决办法参考:http://stackoverflow.com/questions/4886858/android-edittext-deletebackspace-key-event

[java] view
plain copy

 





@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()方法:

[java] view
plain copy

 





@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。奇葩啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: