【问题标题】:Open navigation drawer when options menu button is pressed按下选项菜单按钮时打开导航抽屉
【发布时间】:2013-12-30 15:52:17
【问题描述】:

我希望在按下 选项菜单 按钮时打开导航抽屉。所以在我的夏洛克片段活动中,我添加了:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mDrawerLayout.isDrawerOpen(mDrawerLinear)) {
        mDrawerLayout.openDrawer(mDrawerLinear);
    }
    return true;
}

由于某种原因,按下选项菜单按钮时没有任何反应。

否则抽屉工作正常。当按下操作栏上的应用程序图标或拉动它时,它会打开。 那怎么了?

【问题讨论】:

    标签: android actionbarsherlock android-support-library navigation-drawer


    【解决方案1】:

    也许你指的是onKeyDown (int keyCode, KeyEvent event)

    样本:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent e) {
        if (keyCode == KeyEvent.KEYCODE_MENU) {
            // your action...
    
            if (!mDrawerLayout.isDrawerOpen(mDrawerLinear)) {
                mDrawerLayout.openDrawer(mDrawerLinear);
            }
            return true;
        }
        return super.onKeyDown(keyCode, e);
    }
    

    【讨论】:

    • 好的,伙计。很高兴它有帮助。
    • 您也应该返回 true。来自文档If you handled the event, return true. If you want to allow the event to be handled by the next receiver, return false.
    【解决方案2】:

    上面的答案很好,我只是想补充一些说明(打开/关闭版本):

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    
        if (keyCode == KeyEvent.KEYCODE_MENU) {
    
            View drawerView = findViewById(R.id.navigation_drawer); // child drawer view
    
            if (!mDrawerLayout.isDrawerOpen(drawerView)) {
                mDrawerLayout.openDrawer(drawerView);
            } else if (mDrawerLayout.isDrawerOpen(drawerView)) {
                mDrawerLayout.closeDrawer(drawerView);
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    

    其中mDrawerLayout 是父活动布局,drawerView 是活动布局内抽屉的子视图(列表或smth。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多