android - sgoliver - navigationview onnavigationitemselectedlistener example
Android NavigationView(soporte de material lib) no interactĂșa correctamente con la barra de estado (3)
Agregue sus estilos para API 21+ en values-v21 / themes.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
</resources>
En activity.xml, intente configurar android:fitsSystemWindows="true"
en su NavigationView
(además de DrawerLayout
).
Estoy siguiendo el ejemplo de here para integrar el nuevo NavigationView la biblioteca de Material Design Support en mi aplicación.
Mi diseño general se ve así:
actividad.xml
<android.support.v4.widget.DrawerLayout
android:fitsSystemWindows="true">
<!-- main content -->
<android.support.design.widget.NavigationView
.. />
</android.support.v4.widget.DrawerLayout>
themes.xml
<style name="MyTheme" extends "Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
MyActivity.java
onCreate(..) {
..
// This color can be different depending on some conditions.
DrawerLayout.setStatusBarBackground(color);
}
Sin embargo, sigo obteniendo una barra de estado gris y el NavigationView
no se dibuja debajo de la barra de estado. Creo que la barra de estado gris se debe a que no colorPrimaryDark
atributo colorPrimaryDark
personalizado en el tema. Sin embargo, asumo que DrawerLayout.setStatusBarBackground
anularía y establecería el color de la barra de estado. No puedo encontrar mucha documentación sobre el nuevo NavigationView
. ¿Alguien tiene alguna idea?
Para cada persona que lucha con esto, su archivo de diseño debe ser algo como esto:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
...
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/menu_drawer"/>
</android.support.v4.widget.DrawerLayout>
Tienes que incluir
android:fitsSystemWindows="true"
en DrawerLayout y en NavigationView.
Suspiro, me di cuenta de mi problema. Hubo una extraña abstracción que usamos para agregar un cajón de depuración en el lado derecho. Como resultado, la jerarquía general de la vista se ve así:
<DrawerLayout id="debug">
<LinearLayout id="debug_drawer" />
<DrawerLayout id="nav_drawer" fitsSystemWindows="true">
<NavigationView .... />
</DrawerLayout>
</DrawerLayout>
Así que DrawerLayout.setStatusBarColor
a DrawerLayout.setStatusBarColor
en el cajón incorrecto y configuré a fitsSystemWindows
en el cajón incorrecto. Como resultado, la ventana nunca interactúa con la barra de estado :(