Cómo obtener el color de fondo de la barra de estado para mostrar colorPrimaryDark

Tengo un diseño que se utiliza para actualizar el color de fondo de la barra de estado basado en colorPrimaryDark. Esto funcionó muy bien cuando el diseño raíz del diseño era un CoordinatorLayout, pero cuando cambié a un Linear Layout el fondo de la barra de estado ya no se actualiza.

La fuente para el diseño y una captura de pantalla se pegan a continuación. También se muestra un ejemplo de un diseño que funciona correctamente.

¡Gracias!

Layout.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".churches.ChurchesActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <android.support.design.widget.CoordinatorLayout android:id="@+id/coordinatorLayout" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/contentFrame" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.design.widget.CoordinatorLayout> </LinearLayout> 

Styles.xml

 <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 

Styles-v21.xml

 <resources> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> </style> 

La barra de estado no es colorPrimaryDark

La barra de estado no es colorPrimaryDark

La barra de estado es colorPrimaryDark

La barra de estado es colorPrimaryDark

5 Solutions collect form web for “Cómo obtener el color de fondo de la barra de estado para mostrar colorPrimaryDark”

Al publicar estilos-v21.xml encontré que android: statusBarColor se estableció en transparente:

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

Cambiar android: statusBarColor a colorPrimaryDark lo arregló. ¡Gracias!

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

No estoy seguro de por qué statusBarColor entró en juego después de cambiar a un LinearLayout de un CoordinatorLayout. ¡Gracias!

Prueba esto en Actividad antes de establecer la vista de contenido

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(getFactorColor(getResources().getColor(R.color.action_bar_color), 0.4f)); } 

Donde el método getFactorColor es

 public static int getFactorColor(int color, float factor) { float[] hsv = new float[3]; Color.colorToHSV(color, hsv); hsv[2] *= factor; color = Color.HSVToColor(hsv); return color; } 

Trate de añadir esta propiedad android: fitsSystemWindows = "true" para su diseño Lineal y vea.

Agregue <item name="android:navigationBarColor">?attr/colorPrimaryDark</item> en su tema o llame a window.setNavigationBarColor(@ColorInt int color) programación. Pero, tenga en cuenta que navigationBarColor se introduce desde Android Lollipop (API 21), lo que significa que navigationBarColor no es compatible cuando API <21.

Si usted no consigue cerca después de intentar todos éstos. Simplemente invalide el caché y reinicie los proyectos. Definitivamente esto funcionará.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.