use*_*880 5 android android-keypad android-menu android-view
我有一个不使用选项菜单的主要活动.我需要实现此行为:1.按下Android菜单按钮时,会显示一个弹出窗口2.再次按下Android菜单按钮时,弹出窗口将被取消.
我知道如何通过覆盖主活动中的onKeyDown()来做#1,但不知道如何做#2.显示弹出窗口时,不再触发主活动的onKeyDown().
当主要活动打开弹出窗口时,如何捕获Android菜单按钮?(在我的例子中,弹出窗口是一个带有膨胀视图的PopupWindow).
顺便说一句,我试图在弹出窗口的主视图上设置一个关键监听器,但它没有被触发
mTopView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
LogUtil.debug("*** Key: %d", keyCode);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
use*_*880 14
回答我自己的问题.在PopupWindow视图上调用setFocusableInTouchMode()可以解决问题并使侦听器工作.
PopupMenu popupMenu = ...
...
popupWindow.getContentView().setFocusableInTouchMode(true);
popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU &&
event.getRepeatCount() == 0 &&
event.getAction() == KeyEvent.ACTION_DOWN) {
// ... payload action here. e.g. popupMenu.dismiss();
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3203 次 |
最近记录: |