NavigationView和ActionBarDrawerToggle

时间:2015-06-01 18:20:00

标签: android navigation-drawer android-support-library android-design-library

使用新的NavigationView是否仍然建议使用ActionBarDrawerToggle或者这不是“Material Design”?例如,之前我们应该在抽屉打开时隐藏操作栏项目,但现在指南说他们应该留下来。

3 个答案:

答案 0 :(得分:17)

  

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

不,这不是必需的。

如果您查看新设计资源库的“官方”demo code,则不再使用ActionBarDrawerToggle,因为新NavigationViewAppCompatActivity并非如此需要它。

借助新的v22支持库,您可以删除所有ActionBarDrawerToggle代码,只需使用以下内容即可处理NavigationDrawerActionBar / {{1}之间的互动} hamburger icon:

ToolBar

您需要提供自己的“汉堡包”drawable(我的示例中为@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个案代表您的汉堡包抽屉按钮。它指向内置资源ID(您添加到菜单xml中的内容),并且它会自动处理。

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

closeDrawers()

navigationView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { // Handle menu item clicks here. drawerLayout.closeDrawers(); return true; } }); 是DrawerLayout的一种方法,可以处理所有事情。而已。这就是你现在正确处理导航抽屉所需的所有代码。没有更多混乱的代码来翻转汉堡包等等!

当然,如果你真的想要,你仍然可以使用closeDrawers()NavigationView旧的方法。但你当然不必。

如果您想要抽屉回调

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

答案 1 :(得分:1)

  

使用新的import urllib2 url = "https://scrap.tf/stranges/47" req = urllib2.Request(url, headers={'User-Agent' : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30"}) con = urllib2.urlopen(req) data = con.read() print data filename = raw_input("Enter filename here: ") + ".txt" in_data = open(filename, "w") in_data.write(data) in_data.close() 仍然建议使用NavigationView

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

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

  • A ActionBarDrawerToggle
  • 您的导航抽屉内容
  • 显示和隐藏抽屉的方法

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

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

NavigationView用于在应用栏中提供汉堡包图标。这是允许用户点击图标打开或关闭抽屉的原因。

答案 2 :(得分:0)

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

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

你可以使用ActionBarDrawerToggle实现这一点,即使使用导航视图,因为它使用与以前相同的DrawerLayout。所以它仍然有用,但当然没有必要。