9

使用新NavigationView的仍然建议使用ActionBarDrawerToggle还是这不是“材料设计”?例如,以前我们应该在抽屉打开时隐藏操作栏项目,但现在指南说它们应该保留。

4

3 回答 3

17

用新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);
}

您将需要提供自己的“汉堡包”可绘制对象(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;
        }
    });

closeDrawers()是 DrawerLayout 的一个方法,负责处理一切。而已。这就是您现在真正需要正确处理导航抽屉的所有代码。没有更多用于翻转汉堡包之类的凌乱代码!

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

如果你想要抽屉回调

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

于 2015-06-03T06:12:32.547 回答
1

用新NavigationView的还是推荐使用ActionBarDrawerToggle

是的。两者解决了导航抽屉的两个完全不同的方面。

总的来说,导航抽屉通常包含三个组件:

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

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

您的导航抽屉内容(您的第二个子项DrawerLayout)通常是用户可以单击的项目列表。以前,我见过的大多数实现都使用 aListView或 a RecyclerView,也许还有某种标题。NavigationView是对此的替代品,用于提供符合材料要求的抽屉内容。

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

于 2015-06-01T18:29:25.277 回答
0

完成其他答案后,导航视图的高度应适合整个屏幕,以便在打开时隐藏汉堡包图标。正因为如此,从汉堡到箭头的动画甚至只是显示箭头都是不必要的。

但是当点击当前屏幕时,它会转到另一个片段,想象一个照片库,点击一张照片会显示它更大,应该有一个从汉堡到箭头的动画,箭头应该保持不变,按下时应该有一个反向汉堡的动画,以便可以再次打开导航视图。

您仍然可以使用 ActionBarDrawerToggle 来实现这一点,即使使用导航视图也是如此,因为它使用与以前相同的 DrawerLayout。所以它仍然有用途,但当然不是必需的。

于 2015-06-25T15:33:32.003 回答