我已经改进了 Android Studio 的 Navigation Drawer Activity 项目模板,它使用Toolbar、v7.app.ActionBarDrawerToggle和NavigationView而不是 NavigationDrawerFragment(和 layout/fragment_navigation_drawer.xml)。
这是完美的工作。然后,我走得更远。我的导航抽屉项目处于沉浸式粘性(全屏)模式。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
View decorationView = getWindow().getDecorView();
decorationView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
...
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};
drawerLayout.setDrawerListener(drawerToggle);
navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
...
}
一个问题出现了。NavigationView 上从状态栏(顶部)和导航栏(底部)派生的重叠阴影效果带保持静止。
我怎样才能摆脱它们?
我查看了 Android 的 v7.app.ActionBarDrawerToggle 或 NavigationView 的来源,但徒劳无功。
更新:
感谢@lcw_gg 的建议,我已经完全摆脱了状态栏的阴影(而导航栏的阴影仍然存在)。即在布局xml中设置android:windowFullscreen
属性。true
但我想在 Java 代码中做到这一点。我找到了一种方式,可能它相当于xml方式:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
通过这样做,您不再需要将这两个标志 -View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
和View.SYSTEM_UI_FLAG_FULLSCREEN
- 设置为decorationView
.
尽管如此,我还是找不到摆脱导航栏阴影的方法。我正在等待解决方案。