检测用户何时解除软键盘
在我看来,我有一个EditText小部件。 当用户选择EditText小部件时,我会显示一些说明并出现软键盘。
我使用一个OnEditorActionListener来检测用户何时完成文本输入,然后关闭键盘,隐藏指令并执行一些操作。
我的问题是当用户按BACK键关闭键盘时。 操作系统关闭了键盘,但我的指令(我需要隐藏)仍然可见。
我已经尝试覆盖OnKeyDown,但是当使用BACK按钮关闭键盘时,这似乎不会被调用。
我试过在EditText小部件上设置一个OnKeyListener,但似乎并没有被调用。
如何检测软键盘何时被解除?
这个问题(没有答案,看起来严峻)似乎是问同样的问题:如何检查Android软件键盘的可见性?
我知道一种方法来做到这一点。 子类EditText并实现:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
// Do your thing.
return true; // So it is not propagated.
}
return super.dispatchKeyEvent(event);
}
以下是如何使用自定义视图的链接(适用于子类EditText时):http://developer.android.com/guide/topics/ui/custom-components.html
杰,你的解决方案很好! 谢谢 :)
public class EditTextBackEvent extends EditText {
private EditTextImeBackListener mOnImeBack;
public EditTextBackEvent(Context context) {
super(context);
}
public EditTextBackEvent(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EditTextBackEvent(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK &&
event.getAction() == KeyEvent.ACTION_UP) {
if (mOnImeBack != null)
mOnImeBack.onImeBack(this, this.getText().toString());
}
return super.dispatchKeyEvent(event);
}
public void setOnEditTextImeBackListener(EditTextImeBackListener listener) {
mOnImeBack = listener;
}
}
public interface EditTextImeBackListener {
public abstract void onImeBack(EditTextBackEvent ctrl, String text);
}
链接地址: http://www.djcxy.com/p/92981.html