theme style studio change apptheme android android-layout appcompat android-styles

android - style - La barra de estado transparente no funciona con windowTranslucentNavigation="false"



material design android (3)

Estoy desarrollando una Activity en la que necesito que la barra de navegación sea opaca y la barra de estado transparente en los dispositivos con 5.0+ (API 21+). Los estilos que estoy usando están debajo, junto con una explicación de mi problema.

AppTheme extiende Theme.AppCompat.Light.NoActionBar

<item name="android:statusBarColor">@color/transparent</item> <item name="android:windowActionBar">false</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@color/welbe_red_transparent</item>

FullscreenTheme extends AppTheme

<item name="android:windowNoTitle">true</item> <item name="android:statusBarColor">@color/transparent</item> <item name="android:windowTranslucentNavigation">true</item>

Esto hace que la aplicación se vea así

Si android:windowTranslucentNavigation estilo android:windowTranslucentNavigation , o lo configuro como false en Fullscreen , soluciona el problema de la barra de navegación. El problema es que la barra de estado se vuelve completamente blanca en lugar de permanecer transparente y mostrar el contenido detrás de ella.

He intentado usar fitsSystemWindow="true" en mis diseños, pero no solucionó el problema. Alguien sabe por qué está pasando esto?


Hasta donde sé, no hay una forma adecuada de establecer el color de la barra de estado en las API inferiores a 19.

Para la API 19+, puede usar un atributo similar a windowTranslucentNavigation solo para la barra de estado:

<item name="android:windowTranslucentStatus">true</item>

Notas:

  • La razón por la que recibía una barra de estado blanca es debido a

    <item name="android:statusBarColor">@color/transparent</item>

  • Hay algunos ataques que funcionan en dispositivos específicos del fabricante, pero yo no los usaría yo.


Lucho con esto por más de 3 horas. Envuelva todo en un coordinador. Es el único que parece prestar atención a fitsSystemWindow = "true" o "false"

Este es mi fragmento de actividad principal

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/content_main" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/layout_google_map"/> <include layout="@layout/layout_toolbar_transparent"/> <include layout="@layout/layout_action_buttons"/> <include layout="@layout/layout_bottom_sheet"/> </android.support.design.widget.CoordinatorLayout>

este es el diseño de mi barra de herramientas

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" android:theme="@style/ToolbarTheme" app:popupTheme="@style/AppTheme.PopupOverlay"> <android.support.v7.widget.AppCompatImageView android:layout_width="wrap_content" android:layout_height="?actionBarSize" android:layout_centerHorizontal="true" android:layout_gravity="center" android:adjustViewBounds="true" app:srcCompat="@drawable/ic_fynd_logo_red"/> </android.support.v7.widget.Toolbar> </android.support.design.widget.CoordinatorLayout>

como puede ver, el diseño de mi fragmento hace que el mapa de google se dibuje debajo de la barra de estado.

Tengo una barra de acción donde va el logo de la compañía.

Y otros botones ui "layout_action_buttons" también se envuelven en un diseño Coordinator, por lo que worksSystemsWindows funciona.

Echale un vistazo.


android:windowTranslucentNavigation hace una cosa que android:statusBarColor no hace, que está solicitando las banderas SYSTEM_UI_FLAG_LAYOUT_STABLE y SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN .

Estos son los que debe solicitar para dibujar detrás de la barra de estado.

onCreate en la onCreate de su Activity :

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

Alternativamente, también puede simplemente configurar el fondo de su tema de aplicaciones y eso también aparecerá detrás de su barra de estado.

Más información here .