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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
@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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
@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。奇葩啊!
如题目所示,非常诡异的问题,EditText只能输入但是却不能删除!
解决办法参考:http://stackoverflow.com/questions/4886858/android-edittext-deletebackspace-key-event
[java] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
@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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
@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。奇葩啊!
相关文章推荐
- Android-EditText只能输入不能删除的问题
- Android EditText只能输入不能删除和清空输入内容
- EditText不能删除、只能输入问题
- 关于 EditText 只能输入不能删除的情况
- bug:EditText 只能输入不能删除修改
- 在ActivityGroup中一个Activity中有个EditText,没有设置任何的特殊属性,却只能输入内容,不能删除。
- 使用ActivityGroup 时子选项卡activity里的EditText只能输入无法删除问题
- android EditText 只能输入无法删除的解决方法
- Android开发之旅一EditText不能输入中文
- Android EditText监听小数点让用户只能输入小数点后两位
- Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数
- android EditText多行文本输入的若干问题
- Android EditText 只能输入三行文本的实现方法
- Android之EditText只能输入数字或自定义字符
- 【Android 界面效果12】EditText中的多行输入问题
- android EditText多行文本输入的若干问题
- [问题]Android listView item edittext 不能调用软键盘输入法
- android:edittext 输入问题
- android使用正则表达式控制EditText只能输入数字和英文
- Android之EditText只能输入数字或自定义字符