使用新NavigationView
的仍然建议使用ActionBarDrawerToggle
还是这不是“材料设计”?例如,以前我们应该在抽屉打开时隐藏操作栏项目,但现在指南说它们应该保留。
3 回答
用新
NavigationView
的还是推荐使用ActionBarDrawerToggle
不,这不是必需的。
如果你看一下“官方”的新设计库的演示代码ActionBarDrawerToggle
,已经不再使用了,因为新的NavigationView
并AppCompatActivity
没有真正需要它。
使用新的 v22 支持库,您可以删除所有ActionBarDrawerToggle
代码,只需使用以下代码来处理NavigationDrawer
与ActionBar
/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 的一个方法,负责处理一切。而已。这就是您现在真正需要正确处理导航抽屉的所有代码。没有更多用于翻转汉堡包之类的凌乱代码!
当然,如果你真的想,你仍然可以使用NavigationView
旧ActionBarDrawerToggle
的方式。但你当然不必。
如果你想要抽屉回调
即使ActionBarDrawerToggle
不需要打开/关闭抽屉,它对于处理额外的回调仍然很有用(特别是如果您已经在使用 ActionBar)。DrawerLayout.DrawerListener
否则,您可以使用或 ,来实现您自己的DrawerLayout.SimpleDrawerListener()
,以处理其他打开/关闭相关事件。
用新
NavigationView
的还是推荐使用ActionBarDrawerToggle
是的。两者解决了导航抽屉的两个完全不同的方面。
总的来说,导航抽屉通常包含三个组件:
- 一个
DrawerLayout
- 您的导航抽屉内容
- 一种显示和隐藏抽屉的方法
这DrawerLayout
是包含导航抽屉内容和应用程序内容的布局。它允许您从侧面拉抽屉并将抽屉显示在应用程序的内容上( 的第一个子项DrawerLayout
)。
您的导航抽屉内容(您的第二个子项DrawerLayout
)通常是用户可以单击的项目列表。以前,我见过的大多数实现都使用 aListView
或 a RecyclerView
,也许还有某种标题。NavigationView
是对此的替代品,用于提供符合材料要求的抽屉内容。
ActionBarDrawerToggle
用于在您的应用栏中提供汉堡图标。它允许您的用户点击图标来打开或关闭您的抽屉。
完成其他答案后,导航视图的高度应适合整个屏幕,以便在打开时隐藏汉堡包图标。正因为如此,从汉堡到箭头的动画甚至只是显示箭头都是不必要的。
但是当点击当前屏幕时,它会转到另一个片段,想象一个照片库,点击一张照片会显示它更大,应该有一个从汉堡到箭头的动画,箭头应该保持不变,按下时应该有一个反向汉堡的动画,以便可以再次打开导航视图。
您仍然可以使用 ActionBarDrawerToggle 来实现这一点,即使使用导航视图也是如此,因为它使用与以前相同的 DrawerLayout。所以它仍然有用途,但当然不是必需的。