El efecto de sombra superpuesto permanece en NavigationView del cajón de navegación

He refinado la plantilla de proyecto de la actividad del cajón de navegación de Android Studio, que utiliza la barra de herramientas , v7.app.ActionBarDrawerToggle y NavigationView en lugar de NavigationDrawerFragment (y layout / fragment_navigation_drawer.xml).

Cajón de navegación en inmersión pegajosa cuando el cajón está cerrado

Está funcionando perfectamente. Entonces, voy más lejos. Tengo mi proyecto del cajón de la navegación en modo inmersivo-pegajoso (pantalla completa).

@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; } ... } 

Ha surgido un problema. Las bandas de efecto de sombra superpuesto en NavigationView que se derivan de la barra de estado (en la parte superior) y la barra de navegación (en la parte inferior) permanecen inmóviles.

Cuando se abre el cajón de navegación

Cuando se abre el cajón de navegación y se muestran barras de estado y de navegación pegajosas

¿Cómo puedo deshacerme de ellos?

Revisé las fuentes de v7.app.ActionBarDrawerToggle o NavigationView de Android, pero en vano.


Actualizado:

Gracias por el consejo de @ lcw_gg, me he despojado completamente de la sombra de la barra de estado (mientras la sombra de la barra de navegación permanece). Eso es para establecer android:windowFullscreen atributo true en la disposición xml.

Pero quiero hacer esto en código Java. He encontrado una forma y probablemente es equivalente a la forma xml:

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 

Y al hacer esto, ya no necesitará establecer estos dos indicadores – View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN y View.SYSTEM_UI_FLAG_FULLSCREEN – en el decorationView .

Sombra de la barra de estado ha desaparecido mientras que la barra de navegación sigue siendo

Sin embargo, no puedo encontrar la manera de deshacerse de la sombra de la barra de navegación. Estoy esperando una solución.

Por fin, lo hice.

La solución está utilizando FLAG_LAYOUT_NO_LIMITS junto con FLAG_FULLSCREEN al objeto android.view.Window .

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 

Esto se ha librado de ambas sombras perfectamente.

Introduzca aquí la descripción de la imagen

El comentario de lcw_gg fue una pista muy útil para manipular android.view.Window . Un agradecimiento especial a él.

Para aquellos que tienen el mismo problema que el anterior, pero quieren mantener la barra de estado del sistema siempre mostrando (por lo tanto no se utiliza WindowManager.LayoutParams.FLAG_FULLSCREEN ), hay algún trabajo adicional que hay que hacer para evitar que un contenido extraño se arrastre debajo de la barra de estado en chupete. No noté el problema en kitkat cuando lo probé.

Yo estaba usando dos cajones de navegación (izquierda y derecha) y extrañamente tenía sólo la izquierda que arroja la sombra en la parte inferior. Una vez que se aplicó WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS como se muestra en la respuesta aceptada, la sombra desapareció pero el contenido se deslizó por debajo de la barra de estado, así como el dibujo de la bandeja de navegación en la parte superior de la barra de estado; Todo el camino hasta el bisel del dispositivo.

Para corregir que debe sobrescribir el tema en v21 styles.xml para incluir:

 <item name="android:windowDrawsSystemBarBackgrounds">false</item> <item name="android:statusBarColor">@color/colorPrimaryDark</item> 

Esto moverá el contenido atrás debajo de la barra de estado y también evitará que el cajón de navegación dibuje en la parte superior de la barra de estado.

Además de las entradas anteriores en mis estilos v21, mi código de actividad se parecía a esto:

 // Fixes bottom navbar shadows from appearing on side navigation drawers if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { WindowManager.LayoutParams attributes = getWindow().getAttributes(); attributes.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; getWindow().setAttributes(attributes); } 
  • Diseño de material: cómo establecer transparencia para el botón de acción flotante de Android
  • DrawerLayout con AdMob Ad
  • Desactivación del cajón de navegación, cambio de botón de inicio / indicador ascendente en fragmentos
  • ¿Cómo puedo cambiar el tamaño de texto del elemento NavigationView?
  • Cerrar Gaveta de navegación sin animación
  • Cajón de navegación - Desactivar clic en los elementos detrás del cajón
  • Norma de arquitectura de Android MVP para cargar interfaz de usuario con clase Model que tiene recurso android
  • Android Api 23 Cambiar Navegación Ver headerLayout textview
  • Cambiar entre la imagen de la gaveta de navegación de Android y el cursor hacia arriba al utilizar fragmentos
  • Cambiar el título del encabezado de NavigationView
  • ¿Es este un uso correcto de Android Fragments y NavigationDrawer?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.