NavigationView和ActionBarDrawerToggle

Jer*_*emy 9 android android-support-library navigation-drawer android-design-library

有了新NavigationView的仍然建议使用ActionBarDrawerToggle或这不是"材料设计"?例如,之前我们应该在抽屉打开时隐藏操作栏项目,但现在指南说他们应该留下来.

hun*_*ost 16

有了新NavigationView的仍然建议使用ActionBarDrawerToggle

不,这不是必需的.

如果你看一下"官方"的演示代码为新的设计库,ActionBarDrawerToggle不再使用,因为新的NavigationViewAppCompatActivity并不真正需要它.

随着新的V22支持库,你可以去掉所有的ActionBarDrawerToggle代码,只是使用以下方法来处理之间的相互作用NavigationDrawerActionBar/ ToolBar汉堡包图标:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
    actionBar.setDisplayHomeAsUpEnabled(true);
    ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            return true;
        ....
    }
    return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

你需要提供自己的"汉堡包"画画(R.drawable.ic_menu在我的例子中).除此之外,上面的代码是处理抽屉打开所需的全部代码.该android.R.id.home情况下,onOptionsItemSelected()代表你的汉堡包纸盒键.它指向一个内置的资源ID(不是你添加到菜单xml中的东西),它是自动处理的.

除此之外,你必须通过简单地添加closeDrawers()到你的点击监听器来实现抽屉的关闭,如下所示:

navigationView.setNavigationItemSelectedListener(
    new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            // Handle menu item clicks here.
            drawerLayout.closeDrawers();
            return true;
        }
    });
Run Code Online (Sandbox Code Playgroud)

closeDrawers()是DrawerLayout的一种方法,它可以处理所有事情.而已.这就是你现在正确处理导航抽屉所需的所有代码.没有更多混乱的代码来翻转汉堡包等等!

当然,如果你真的想,你仍然可以使用NavigationViewActionBarDrawerToggle旧的方式.但你当然不必.

如果你想要抽屉回调

即使ActionBarDrawerToggle不需要打开/关闭抽屉,它仍然可以用于处理额外的回调(特别是如果您已经使用ActionBar).否则,您可以通过使用DrawerLayout.DrawerListener或使用来实现自己的DrawerLayout.SimpleDrawerListener(),以处理其他打开/关闭相关的事件.


Tan*_*.7x 1

有了新的NavigationView还是建议使用ActionBarDrawerToggle

是的。两者处理抽屉式导航的两个完全不同的方面。

总的来说,抽屉式导航通常由三个组件组成:

  • ADrawerLayout
  • 您的导航抽屉内容
  • 一种显示和隐藏抽屉的方法

DrawerLayout是保存导航抽屉内容和应用程序内容的布局。它允许您从侧面拉入抽屉并在应用程序的内容( 的第一个子项DrawerLayout)上显示抽屉。

您的导航抽屉内容( 的第二个子项DrawerLayout)通常是用户可以单击的项目列表。以前,我见过的大多数实现都使用 aListView或 aRecyclerView以及某种类型的标头。NavigationView是其替代品,用于提供符合材质要求的抽屉内容。

ActionBarDrawerToggle用于在应用栏中提供汉堡包图标。它允许您的用户点击图标来打开或关闭抽屉。