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).
- Navegación Cajón de contenedores múltiples y mejores prácticas
- El color del elemento de menú NavigationView no cambia en API 15
- Elementos de menú de la bandeja de navegación seleccionados dentro de diferentes grupos
- Actualización de un fragmento en respuesta a la interacción de Android Navigation Drawer
- Color de fondo ondulado de Android
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.
¿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
.
Sin embargo, no puedo encontrar la manera de deshacerse de la sombra de la barra de navegación. Estoy esperando una solución.
- La barra de notificaciones es gris después de implementar Nav Drawer
- FindViewById (int) en Activity no se puede aplicar a (int, android.support.v7.widget.Toolbar
- Notificación de la divisa en la barra de herramientas en la barra de herramientas - Android
- El cajón de navegación en android no está en pantalla completa
- Androide. ¿Cómo puedo deslizar NavigationDrawer de la biblioteca de pruebas Espresso?
- Cómo abrir el cajón de navegación en el botón de clic en el fragmento principal?
- Diseño del cajón de navegación el título en la barra de herramientas no cambia
- Cajón de navegación cambio de color
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.
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); }
- ¿Cuál es la diferencia entre enableReaderMode y enableForegroundDispatch?
- Android NDK para x86_64 no tiene referencia para bcopy e índice