我希望能够使用密钥(即数字1-4)从PopupMenu中选择一个选项。我正在编写应用程序的设备有一个内置的数字键盘,使它们始终可访问(不使用软键盘)。
目的是让用户能够按下一个数字/按钮,这里显示的菜单正常工作(这是我的活动中):
@Override
public boolean onKeyUp(int keyCode, KeyEvent event){
Log.d("onKeyUp", KeyEvent.keyCodeToString(keyCode));
if (event.getKeyCode() == KeyEvent.KEYCODE_5) {
showPopupMenu((Button) findViewById(R.id.btnMenu));
}
return true;
}
我希望能够使用键盘从菜单中选择其中一个选项,但是当菜单可见时,只要按下某个键,就不会触发onKeyUp事件。
这是菜单代码:
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();
}
这是使用Android 4.1(API 16)。谢谢你的帮助!很高兴在需要的地方提供更多代码。
答案 0 :(得分:0)
您需要在popupwindow对象中设置keyevent侦听器,如此
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;
}
});
}