如何在Android上通过图标点击打开侧边栏?

3

我已经实现了带有应用工具栏和汉堡菜单的Hamburger条,它们都正常工作。以下是工具栏和汉堡菜单的快照:

enter image description here

Hamburger bar

enter image description here

我可以通过滑动来打开此栏,但我也希望通过单击可绘制图标(右上角图标)来打开它。我该怎么做?

MainActivity

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    drawerFragment = (FragmentDrawer)
            getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
    drawerFragment.setDrawerListener(this);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    return super.onOptionsItemSelected(item);
}

我认为我不需要在布局文件中进行任何更改。我需要在MainActivity文件中添加什么来实现这一点?
我是Android编程的新手。任何帮助都将不胜感激。

检查一下这个链接,它可能对你有帮助:https://dev59.com/fWMm5IYBdhLWcg3wKsgj。 - Pavan
3个回答

0

使用openDrawer()方法。

private DrawerLayout mDrawerLayout;
...
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
...
mDrawerLayout.openDrawer(Gravity.END); // or whatever gravity the of the drawer you want to open

抱歉!我没听懂你的意思。点击可绘制图标(R.drawable.icon_navigation)如何帮助我打开酒吧? - user5063816
1
我认为Gravity.END更适合他的需求,因为他在右侧使用它。 - Mike
OnClickListener内部调用openDrawer()函数,@SnowClue。 - Karakuri

0
使用工具栏组件应该很容易实现,只需使用类似于以下代码的代码即可:
    Toolbar toolbar = (Toolbar) findViewById(R.id.home_toolbar);
    toolbar.inflateMenu(R.menu.menu_home);
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            if (item.getItemId() == R.id.action_settings) {
                mDrawerLayout.openDrawer(Gravity.RIGHT); // where mDrawerLayout is your android.support.v4.widget.DrawerLayout in your activity's xml layout.
            }
            return false;
        }
    });

编辑:

关键组件是 menu_home.xml 文件,该文件位于您的 res/menu 文件夹中。您可以在此添加所需的菜单项,自定义其图标,甚至添加尽可能多的项目到工具栏右侧(显然,在需要处理 openDrawer() 方法的任何菜单项上操作 - 推荐使用最右边的菜单项)。


点击工具栏的任何位置都会打开该栏,对吧? - user5063816
如果在工具栏的任何位置轻触,抽屉不应该打开。这是一种非常糟糕的做法和错误的用户体验。只有在轻触汉堡图标时才应该打开。 - Mike
但是在上面的代码中,您将“汉堡图标”传递到哪里? - user5063816

0

使用 ActivityonOptionsItemSelected(MenuItem menuItem) 方法:

首先,将你的 DrawerLayout 引用保存在一个类字段中:

DrawerLayout drawerLayout;

在onCreate的某个位置放置以下代码:
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout)

并实现该方法:

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    // if you want the default back/home hamburger menu item just put android.R.id.home instead
    if (menuItem.getItemId() == R.drawable.icon_navigation) { 
        drawerLayout.openDrawer(GravityCompat.END);
    }
    return super.onOptionsItemSelected(menuItem);
}

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