studio sgoliver onnavigationitemselectedlistener navegacion left google example barra android android-support-library material-design android-design-library

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 :(