Android 当弹出菜单可见时检测按键
我希望能够使用键(即数字1-4)从弹出菜单中选择一个选项。我正在为其编写应用程序的设备有一个内置数字键盘,使其始终可以访问(不使用软键盘) 其目的是让用户能够按一个数字/按钮,并在此处显示正在工作的菜单(这在我的活动中): 我希望能够使用键盘从菜单中选择一个选项,但是当菜单可见时,只要按下一个键,onKeyUp事件就不会触发 以下是菜单代码:Android 当弹出菜单可见时检测按键,android,popupmenu,Android,Popupmenu,我希望能够使用键(即数字1-4)从弹出菜单中选择一个选项。我正在为其编写应用程序的设备有一个内置数字键盘,使其始终可以访问(不使用软键盘) 其目的是让用户能够按一个数字/按钮,并在此处显示正在工作的菜单(这在我的活动中): 我希望能够使用键盘从菜单中选择一个选项,但是当菜单可见时,只要按下一个键,onKeyUp事件就不会触发 以下是菜单代码: public void showPopupMenu(View v){ PopupMenu popupMenu = new PopupMenu(th
public void showPopupMenu(View v){
PopupMenu popupMenu = new PopupMenu(this, v);
final MenuInflater menuInflator = popupMenu.getMenuInflater();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
//Do something
return true;
}
});
menuInflator.inflate(R.menu.current_screen_menu, popupMenu.getMenu());
popupMenu.show();
}
这是使用安卓4.1(API 16)。谢谢你的帮助!乐意提供更多需要的代码。您需要在popupwindow对象中设置keyevent listener,如下所示
public void showPopupMenu(View v){
PopupMenu popupMenu = new PopupMenu(this, v);
final MenuInflater menuInflator = popupMenu.getMenuInflater();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
//Do something
return true;
}
});
menuInflator.inflate(R.menu.current_screen_menu, popupMenu.getMenu());
popupMenu.show();
// You have to implement following listner
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;
}
});
}
你能想个办法吗?我也面临着类似的问题!嘿,对不起,我不能说我能让它工作。最后,我使用了一个简单明了的“对话”,你可以找到它
public void showPopupMenu(View v){
PopupMenu popupMenu = new PopupMenu(this, v);
final MenuInflater menuInflator = popupMenu.getMenuInflater();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
//Do something
return true;
}
});
menuInflator.inflate(R.menu.current_screen_menu, popupMenu.getMenu());
popupMenu.show();
// You have to implement following listner
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;
}
});
}