前言
之前用NavigationView实现菜单栏的时候,遇到一些问题,记录一下,欢迎相互补充。
正文
问题一:
打开菜单栏沉浸式状态栏无效,始终有一层阴影,如图
经过多方查询测试,后来找到最简单靠谱的方式是在navigationView布局里面加入这句话就搞定了。insetForeground这个属性是ScrimInsetsFrameLayout自带的,表示插入区域的前景色。
问题二
在navigationView中切换Activity Fragment 掉帧卡顿:点击菜单栏目,我们一般是跳转新的页面,并关闭抽屉,然而在跳转过程中会出现明显卡顿,解决方法如下:
1.在NavigationView的点击事件中做一个标记,记录被点击的item;
2.为DrawerLayout添加监听,在onDrawerClosed中处理被点击item的相关事件;
private int selectedItem;//记录点击条目ID
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
//关闭drawer
if(drawerLayout.isDrawerOpen(Gravity.LEFT)){
drawerLayout.closeDrawers();
}
switch (item.getItemId()){
case R.id.item1:
selectedItem = R.id.item1;
break;
case R.id.item2:
selectedItem = R.id.item2;
break;
//.........
}
return true;
}
});
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
switch (selectedItem) {
case R.id.item1:
//逻辑操作跳转界面startactivity或switchFragment
break;
case R.id.item2:
break;
}
@Override
public void onDrawerStateChanged(int newState) {
}
});