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 .