¿Cómo puedo hacer que la barra de estado sea blanca con iconos negros?
83
Quiero cambiar el color de la barra de estado de mi aplicación para que sea blanca con iconos negros (en lugar del negro predeterminado con iconos blancos). ¿Hay alguna forma de hacer esto?
Entonces, ¿qué pasa con las aplicaciones que siguen las pautas de Android y tienen íconos de notificación blancos, cómo espera que el usuario los vea cuando están en su aplicación?
tyczj
2
pero no se puede cambiar el color de otros recursos de aplicaciones, de hecho piruleta hace que todos los iconos blancos no importa qué
tyczj
Respuestas:
126
Con Android M (api nivel 23) puede lograr esto desde el tema con android:windowLightStatusBaratributo.
Editar:
Tal como mencionó Pdroid, esto también se puede lograr mediante programación:
@busylee Supongo que puede crear un hijo de su tema y cambiarlo allí y aplicarlo con activity.getTheme.setTo (Theme another)
bugraoral
Hola @wrecker, tengo el mismo problema con el icono de notificación de mi aplicación. He agregado android: windowLightStatusBar = true en mi tema y lo estoy probando en Android M. pero el icono de notificación blanco no cambia a gris cuando cambio el tema usando una aplicación de inicio de terceros (Nova Launcher). He intentado todas las formas posibles, pero todavía no he podido solucionarlo. Si puedes ayudarme te lo agradeceré.
Sujit
1
@busylee Sí, puede configurarlo en cualquier momento utilizando el siguiente método: View.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); Debería agregarse a la respuesta
Pdroid
6
¿Qué pasa si quiero usar en 22 o versiones anteriores?
Dhara Patel
45
Es posible hacer la barra de estado blanca con iconos grises, por ejemplo, de esta manera para SDK> = 23 (ver documentos ):
establezca android: windowDrawsSystemBarBackgrounds en verdadero * . Esta es una bandera cuya descripción se da a continuación:
Bandera que indica si esta Ventana es responsable de dibujar el fondo de las barras del sistema. Si es verdadero y la ventana no es flotante, las barras del sistema se dibujan con un fondo transparente y las áreas correspondientes en esta ventana se rellenan con los colores especificados en {@link android.R.attr # statusBarColor} y {@link android.R .attr # navigationBarColor}. Corresponde a {@link android.view.WindowManager.LayoutParams # FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS}.
No hay manera de hacerlo a menos que tenga un control de toda la rom para personalizarla manualmente. Lo que te sugiero que hagas es que uses un color gris claro para el color de la barra de estado a través de tu tema como lo hace Google Drive.
Editar: consulte la respuesta de @Wrekcker ya que esto cambió en Android M.
Noté que cuando uso un diseño normal como RelativeLayout, no funciona. Pero cuando cambié a esa biblioteca de soporte como CordinatorLayout, finalmente comenzó a funcionar. Prueba esto.
Respuestas:
Con Android M (api nivel 23) puede lograr esto desde el tema con
android:windowLightStatusBar
atributo.Editar:
Tal como mencionó Pdroid, esto también se puede lograr mediante programación:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
fuente
Es posible hacer la barra de estado blanca con iconos grises, por ejemplo, de esta manera para SDK> = 23 (ver documentos ):
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:windowLightStatusBar">true</item> </style>
en su styles.xml y configúrelo
colorPrimary
en blanco o programáticamente:getWindow().setStatusBarColor(Color.WHITE);
fuente
SDK >= 23
pero @being_sohelkhan por alguna razón ha editado mi respuesta original ... stackoverflow.com/posts/46897243/revisionsAcabo de agregar a mi actividad en Kotlin:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { window.decorView.systemUiVisibility =View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR window.statusBarColor = Color.WHITE }
fuente
solo agrega esto a tu estilo
<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item>
establezca android: windowDrawsSystemBarBackgrounds en verdadero * . Esta es una bandera cuya descripción se da a continuación:
Bandera que indica si esta Ventana es responsable de dibujar el fondo de las barras del sistema. Si es verdadero y la ventana no es flotante, las barras del sistema se dibujan con un fondo transparente y las áreas correspondientes en esta ventana se rellenan con los colores especificados en {@link android.R.attr # statusBarColor} y {@link android.R .attr # navigationBarColor}. Corresponde a {@link android.view.WindowManager.LayoutParams # FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS}.
fuente
Puedes usarlo de esta manera en Kotlin
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
Asegúrate de llamarlo
onCreate()
antessetContentView()
fuente
No hay manera de hacerlo a menos que tenga un control de toda la rom para personalizarla manualmente. Lo que te sugiero que hagas es que uses un color gris claro para el color de la barra de estado a través de tu tema como lo hace Google Drive.
Editar: consulte la respuesta de @Wrekcker ya que esto cambió en Android M.
fuente
Tuve el mismo problema.
Noté que cuando uso un diseño normal como RelativeLayout, no funciona. Pero cuando cambié a esa biblioteca de soporte como CordinatorLayout, finalmente comenzó a funcionar. Prueba esto.
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true" tools:context=".Activities.Activity"> <android.support.v7.widget.Toolbar android:id="@+id/tb_activity" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.CoordinatorLayout>
<********* DEBAJO DE OTROS ATRIBUTOS ************>
estilos
<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" parent="AppTheme"> <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" />
Y en el manifiesto
<activity android:name=".Activities.MyActivity" android:label="Activity" android:theme="@style/AppTheme.NoActionBar"> </activity>
fuente