当选项菜单按钮被按下时打开导航抽屉。

9

当按下选项菜单按钮时,我希望导航抽屉能够打开。因此,在我的Sherlock Fragment活动中,我添加了以下内容:

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

否则抽屉功能正常。当应用程序工具栏上的应用图标被按下或者拉开时会打开它。那么问题出在哪里呢?

2个回答

28

也许你指的是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);
}

当然,伙计。很高兴能帮到你。 - Keyfe Ang
你也应该返回 true。从文档中可以看到:如果你处理了事件,返回 true。如果你想允许下一个接收者处理事件,返回 false。 - Arif Amirani

11

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

@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 是活动布局中抽屉子视图的表示(列表或其他内容)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接