使用新的NavigationView
是否仍然建议使用ActionBarDrawerToggle
或者这不是“Material Design”?例如,之前我们应该在抽屉打开时隐藏操作栏项目,但现在指南说他们应该留下来。
答案 0 :(得分:17)
使用新的
NavigationView
仍然建议使用ActionBarDrawerToggle
不,这不是必需的。
如果您查看新设计资源库的“官方”demo code,则不再使用ActionBarDrawerToggle
,因为新NavigationView
和AppCompatActivity
并非如此需要它。
借助新的v22支持库,您可以删除所有ActionBarDrawerToggle
代码,只需使用以下内容即可处理NavigationDrawer
与ActionBar
/ {{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
是。这两个解决了导航抽屉的两个完全不同的方面。
总的来说,导航抽屉通常有三个组件:
ActionBarDrawerToggle
DrawerLayout
是用于保存导航抽屉内容和应用内容的布局。这是允许您从侧面拉出抽屉并在应用程序内容上显示抽屉(DrawerLayout
的第一个孩子)的原因。
您的导航抽屉内容(DrawerLayout
的第二个孩子)通常是用户可以点击的项目列表。以前,我见过的大多数实现都使用了DrawerLayout
或ListView
,也许是某种标题。 RecyclerView
是此替代品,用于提供符合材料的抽屉内容。
NavigationView
用于在应用栏中提供汉堡包图标。这是允许用户点击图标打开或关闭抽屉的原因。
答案 2 :(得分:0)
完成其他答案后,导航视图应在高度方面适合整个屏幕,以便在打开时隐藏汉堡包图标。因此,不需要动画从汉堡到箭头甚至只显示箭头。
但是当点击当前屏幕时它转到另一个片段,想象一个照片库并点击一张照片会显示它更大,应该有一个从汉堡到箭头的动画,箭头应该保留,按下时应该是汉堡的反向动画,因此可以再次打开导航视图。
你可以使用ActionBarDrawerToggle实现这一点,即使使用导航视图,因为它使用与以前相同的DrawerLayout。所以它仍然有用,但当然没有必要。