对于软键盘删除事件,网上有很多方案是如下,但是 google api也说明了,这个只是监听硬件键盘,对于软键盘并不负责触发(我测试了一下,软键盘能够监听delete键,其他键像数字字母等没有触发这里的监听方法)。
editText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//You can identify which key pressed buy checking keyCode value with KeyEvent.KEYCODE_
if(keyCode == KeyEvent.KEYCODE_DEL) {
//this is for backspace
}
return false;
}
});
当然,也有是通过TextWatcher来处理delete事件,但是这个监听只在数据变化时才触发,如果edittext本身就没有内容,此时点击软件盘delete键也就不会触发这里的方法。
类似于下面的逻辑:
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
mPreviousLength = s.length();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
mBackSpace = mPreviousLength > s.length();
if (mBackSpace) {
// do your stuff ...
}
}
其实对于软件盘的监听,还要从源头找起,这里先介绍一下自定义view输入
Android之自定义View来接收输入法输入的内容
这篇文章转自:http://www.jianshu.com/p/2b483febec72通过此篇文章,可以了解到输入法的事件工作机制,对于官方的edittext也是类似的原理。
对于很多新人来讲,能接收输入法输入的内容大概只有EditText和TextView这两个控件了,其实不然,只要是View的子类,都可以接收输入法输入的内容。
现在我们一步一步来实现,第一步我们得有一个View的子类。
//首先我们得重写View中的一个方法,返回true,就是让这个View变成文本可编辑的状态,默认返回false。
@Override public boolean onCheckIsTextEditor() {
return true;
}
//第二个就是重写方法,需要返回一个InputConnect对象,这个是和输入法输入内容的桥梁。
public InputConnection onCreateInputConnection(EditorInfo outAttrs);
// outAttrs就是我们需要设置的输入法的各种类型最重要的就是