¿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?

Jon
fuente
Cambie su tema predeterminado
Rohit5k2
¿A qué tema debo cambiarlo que cambie los íconos de la barra de notificaciones a negro?
Jon
Utilice un tema personalizado. Para empezar, consulte stackoverflow.com/questions/8024706/…
Rohit5k2
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:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 
bugraoral
fuente
2
¿Puedo configurarlo programáticamente?
Busylee
@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 ):

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

en su styles.xml y configúrelo colorPrimaryen blanco o programáticamente:

getWindow().setStatusBarColor(Color.WHITE);
Rammgarot
fuente
2
Se agregó en API 23, no en 21 - ver documentos
Vadim Kotov
hey @VadimKotov en realidad escribí SDK >= 23pero @being_sohelkhan por alguna razón ha editado mi respuesta original ... stackoverflow.com/posts/46897243/revisions
Rammgarot
15

Acabo 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
            }
Serg Burlaka
fuente
7

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}.

Reyes Ayejuni Ilemobayo
fuente
1

Puedes usarlo de esta manera en Kotlin

 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

Asegúrate de llamarlo onCreate()antessetContentView()

Gastón Saillén
fuente
0

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.

k0sh
fuente
1
Es compatible con Android M
Amir Dora.
-1

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>
murt
fuente