ho affinato il modello di progetto di navigazione cassetto attività di Android Studio, che utilizza Toolbar, v7.app.ActionBarDrawerToggle e NavigationView al posto del NavigationDrawerFragment (e il layout/fragment_navigation_drawer .xml).Sovrapposizione effetto ombra rimane sul di navigazione cassetto NavigationView
E 'perfettamente funzionante. Quindi, vado oltre. Ho il mio progetto Navigation Drawer nella modalità immersiva-sticky (schermo intero).
@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;
}
...
}
Un problema è aumentato. Le bande di ombreggiatura sovrapposte sul NavigationView che derivano dalla barra di stato (sul lato superiore) e dalla barra di navigazione (sul lato inferiore) rimangono ferme.
Come posso liberarmi di loro?
Ho esaminato i sorgenti di v7.app.ActionBarDrawerToggle o NavigationView di Android, ma invano.
Aggiornato:
Grazie per la consulenza di @ lcw_gg, ho deciso di eliminare l'ombra della barra di stato completamente (mentre l'ombra della barra di navigazione rimane). Cioè per impostare l'attributo android:windowFullscreen
true
nel layout xml.
Ma voglio farlo nel codice Java. Ho trovato un modo e probabilmente è equivalente al modo in xml:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
E con questo modo, non hanno bisogno di più di impostare questi due bandiere - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
e View.SYSTEM_UI_FLAG_FULLSCREEN
- al decorationView
.
Eppure, non riesco a trovare il modo per sbarazzarsi dell'ombra della barra di navigazione. Sto aspettando una soluzione.
Quali livelli API significa questo problema si verifica su? È tutto di loro o solo post-lecca-lecca? – PPartisan
@PPartisan Il mio dispositivo è 5.1.1 (API-22 Lollipop; Nexus7). Non ho ancora esaminato altri dispositivi. – hata
Può valere la pena sperimentare con gli attributi 'android: elevation' nei file' layout' 'xml' in quel caso. Ho avuto problemi simili in passato, quando ho dimenticato l'elevazione. – PPartisan