1.DrawerLayout是一个布局,它允许在布局中放入两个直接子控件,第一个子控件就是主屏幕中的内容,第二个子控件就是滑动菜单中显示的内容。其中第二个子控件必须设置layout_gravity属性,它表示滑动菜单在屏幕的左边还是右边。
PS:第二个子控件的layout_gravity属性值设置为start,表示根据系统语言进行判断,如果系统语言是从左往右的,那么滑动菜单就在左边,如果系统语言是从右往左的,那么滑动菜单就在右边。类似的,设置成end的话,则是系统语言的结尾处。
2.设置导航栏按钮实现点击按钮弹出抽屉。先获取到ActionBar的实例,然后为HomeAsUp按钮设置一个合适的图标(默认是返回键)
ActionBar actionBar = getSupportActionBar();
if(actionBar!=null){
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.list);
}
然后在重写的onOptionsItemSelected()方法中为HomeAsUp按钮添加点击事件,打开抽屉
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
break;
PS:这里的openDrawer()方法接收一个Gravity参数,与XML中定义的一致,传入GravityCompat.START
1.在app/build.gradle中添加design库的依赖
implementation 'com.android.support:design:27.1.1'
2.编写NavigationView中的菜单项:在res/menu目录下新建一个目录资源文件nav_menu.xml
group标签表示一个组,组和组之间的Item有明显的分隔。group的checkableBehavior属性设置为single表示该组中的所有菜单项只能单选。
3.编写NavigationView的headerLayout,这是一个可以随意定制的布局,示例中就简单的放一张图片两段文本:在res/layout目录下新建一个布局资源文件nav_header.xml
4.将滑动菜单DrawerLayout的第二个子控件设置为NavigationView
......
5.为NavigationView的菜单项设置点击事件监听器
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
drawerLayout.closeDrawers();
return true;
}
});
PS:上述示例代码运行时,会发现点击一个滑动菜单中的Item之后,下次打开滑动菜单时会发现上次被点击的Item被选中了。如果不需要这种效果,可以在nav_menu.xml文件中将对应的菜单组的选择模式设置为none