NavigationDrawerFragment (および layout/fragment_navigation_drawer.xml) の代わりにToolbar、v7.app.ActionBarDrawerToggle、およびNavigationViewを使用する Android Studio の Navigation Drawer Activity プロジェクト テンプレートを改良しました。
それは完全に機能しています。それから、私はさらに行きます。Navigation Drawer プロジェクトをイマーシブ スティッキー(フル スクリーン) モードで使用しています。
@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 の重なり合った影の効果のバンドは静止したままです。
どうすればそれらを取り除くことができますか?
v7.app.ActionBarDrawerToggle や Android の NavigationView のソースを見直してみましたがだめでした。
更新しました:
@lcw_gg のアドバイスに感謝します。ステータス バーの影を完全に取り除きました (ナビゲーション バーの影は残ります)。つまり、レイアウト xml にandroid:windowFullscreen
属性を設定します。true
しかし、これを Java コードで実行したいと考えています。私は方法を見つけましたが、おそらくそれはxmlの方法と同等です:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
これを行うと、これら 2 つのフラグ --とView.SYSTEM_UI_FLAG_FULLSCREEN
-- をに設定する必要がなくなりますdecorationView
。
それでも、ナビゲーション バーの影を取り除く方法が見つかりません。解決策を待っています。