Mam wyrafinowane szablonu projektu nawigacyjny Szuflada aktywności Android Studio, który wykorzystuje Toolbar, v7.app.ActionBarDrawerToggle i NavigationView zamiast NavigationDrawerFragment (i układ/fragment_navigation_drawer .xml).Nakładające efekt cienia pozostaje na panel nawigacji za NavigationView
Jest doskonale działa. Potem idę dalej. Mam projekt mojej szuflady nawigacji w trybie immersive-sticky (pełny ekran).
@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;
}
...
}
Problem wzrósł. Pasma nałożonego efektu cienia na NavigationView, które pochodzą od paska stanu (na górze) i paska nawigacyjnego (w dolnej części), pozostają bez zmian.
Jak mogę się ich pozbyć?
Sprawdziłem źródła v7.app.ActionBarDrawerToggle lub NavigationView of Android, ale na próżno.
Aktualizacja:
Dzięki za radę @ lcw_gg za, mam pozbyć cieniem na pasku stanu jest całkowicie (podczas gdy cień na pasku nawigacyjnym pozostaje). To jest ustawienie android:windowFullscreen
atrybut true
w układzie xml.
Ale chcę to zrobić w kodzie Java. Znalazłem sposób i prawdopodobnie jest to równoważne drodze xml:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
I z ten sposób, nie trzeba nic więcej, aby ustawić te dwie flagi - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
i View.SYSTEM_UI_FLAG_FULLSCREEN
- do decorationView
.
Nadal nie mogę znaleźć sposobu, aby pozbyć się cieniem na pasku nawigacyjnym jest. Czekam na rozwiązanie.
Co API poziom ma ten problem występuje na? Czy to wszystko z nich, czy tylko po Lollipop? – PPartisan
@PPartisan Moje urządzenie to 5.1.1 (API-22 Lollipop; Nexus7). Nie testowałem jeszcze innych urządzeń. – hata
Może warto eksperymentować z atrybutami 'android: elewacja' w plikach' layout' 'xml'. W przeszłości doświadczyłem podobnych nieszczęść, kiedy zapomniałem o elewacji. – PPartisan