使用新的 NavigationView
是否仍建议使用 ActionBarDrawerToggle
还是这不是“ Material 设计”?例如,以前我们应该在抽屉打开时隐藏操作栏项目,但现在指南说它们应该保留。
最佳答案
With the new
NavigationView
is it still recommended to useActionBarDrawerToggle
不,这不是必需的。
如果你看“官方”demo code对于新的设计库,不再使用 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
)。除此之外,上面的代码是处理抽屉打开所需的全部代码。 onOptionsItemSelected()
中的 android.R.id.home
案例代表您的汉堡包抽屉按钮。它指向一个内置资源 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()
来实现自己的功能,以处理其他打开/关闭相关事件。
关于android - NavigationView 和 ActionBarDrawerToggle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580478/