【问题标题】:Override Menu Button action覆盖菜单按钮操作
【发布时间】:2012-12-12 20:28:14
【问题描述】:

Nexus显示屏幕如下:(这里我按右上角的3个点下拉菜单)

我有一个菜单出现在屏幕的右上角。 手机显示菜单如下(仅当我按下手机上的菜单按钮时才会发生这种情况):

我希望手机中的菜单行为与平板电脑中的相同——我可以在屏幕右上角显示菜单。我的问题是,有什么方法可以覆盖菜单膨胀行为,即使在手机中也必须从屏幕的右上角显示菜单

【问题讨论】:

  • 你真的不应该弄乱菜单按钮。不同的制造商对菜单按钮有不同的解决方案,如果您开始移动它,用户将不知道发生了什么。
  • 此外,在很多手机上,操作栏显示在右上角。这不是手机与平板电脑的问题,而是设备是否具有专用的屏幕外菜单按钮。请帮助您的用户接受默认行为,从而遵循他们设备上所有其他应用所采用的模式。
  • @CommonsWare 感谢您的投入。用户如何知道电话选项中有可供选择的菜单?
  • "用户如何知道手机选项中有菜单可供选择?" ——就像他们过去五年一样:他们会知道他们有一个菜单按钮,并且会不时按下它来看看会发生什么。恕我直言,这从来都不是一个好方法。但是,它 UI 约定和标准应用程序的设置。具有 MENU 按钮的设备的用户可能已经使用该按钮有一段时间了,并且可能无法将操作栏中的“...”提示识别为某种相关。

标签: android android-layout android-actionbar actionbarsherlock


【解决方案1】:

有点复杂,但大致思路如下:

public void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.layout.menu, popup.getMenu());
popup.show();

}

在此方法中,v 是您希望菜单出现的视图。

您需要Override 菜单按钮,这样当用户按下它时,您的菜单就会出现。执行以下操作

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ( keyCode == KeyEvent.KEYCODE_MENU ) {
        //Put the code for an action menu from the top here
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

然后其他一切都与您的普通菜单相同(我认为)

【讨论】:

  • 我会建议 onKeyUp 事件,因为我已经尝试过 onKeyDown 并且我的 PopupMenu 在我释放菜单按钮后立即消失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多