显示软键盘时,我试图捕获“后退”键事件。
我使用的是SDK版本8,仅当按如下所示隐藏软键盘时,才能成功捕获后退键事件:
@Override
public void onBackPressed() {
// do something
super.onBackPressed();
}
问题是显示软键盘时系统没有调用此方法。我试图登录onKeyDown / Up()方法以及上面的方法来弄清楚在这种情况下正在发生的事情是无济于事的。见下文:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
//DEBUGGING
Log.d(TAG + "KeyUP", String.valueOf(event));
}
将按预期返回音量和菜单键的日志,但是仅当隐藏软键盘和菜单时才记录返回键。
是否有任何“后退键”大师可以解释这种现象?
任何帮助是极大的赞赏。
在这个网站和Android API上深入研究之后,我发现
KeyEvent.KEYCODE_BACK
被具有输入法连接的IME捕获并吞噬,并且当前显示该输入法(换句话说,未隐藏软键盘)。这意味着该事件在系统调用Activity类的onKeyDown()或onKeyUp()方法之前被消耗。
要解决此问题,请创建IME小部件的子类(TextView或其子类,如EditText)并实现onKeyPreIme()。
堆栈用户i2097i在此处的活动中发布了一个很好的解决方案,用于实现onKeyPreIme()。如果您希望保留Android的默认行为(即关闭键盘),只需确保在onKeyPreIme()覆盖中返回FALSE。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句