Cambiar el color del texto de la barra de estado cuando primaryDark es blanco


87

Estoy intentando reproducir el comportamiento de la aplicación Google Calendar: ingrese la descripción de la imagen aquí

pero no he encontrado una forma de cambiar el color del texto de estado. Si configuro el colorPrimaryDark como blanco, no puedo ver los íconos ni el texto de la barra de estado debido a que su color también es blanco.

¿Hay alguna forma de cambiar el color del texto de la barra de estado?

Gracias por adelantado

Respuestas:


174

No estoy seguro de qué nivel de API está tratando de apuntar, pero si puede usar cosas específicas de API 23, puede agregar lo siguiente a su AppTheme styles.xml:

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

cuando android:windowLightStatusBarse establece en verdadero, el color del texto de la barra de estado se podrá ver cuando el color de la barra de estado sea blanco, y viceversa cuando android:windowLightStatusBarse establezca en falso, el color del texto de la barra de estado se diseñará para verse cuando el color de la barra de estado sea oscuro.

Ejemplo:

<!-- 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>
    <!-- Status bar stuff. -->
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="android:windowLightStatusBar">true</item> 
</style>

38
si mi nivel de API es 21, no funciona, ¿puede decirme la alternativa para eso?
saikrupa

8
Alguna solución encontrada para Api 21. ¿Por favor ayuda?
iMDroid

1
Nota: android: windowLightStatusBar requiere API nivel 23 (el mínimo actual es 21) más ... (⌘F1)
Hardik Darji

Para api 21 esto no es posible. En las aplicaciones de Google, es una barra negra en lugar de una blanca.
Joris

1
Vea esta publicación para el nivel de API <23: stackoverflow.com/questions/49254877/…
Basti Vagabond

30

puedes hacerlo programáticamente como esta respuesta

solo agrega esto

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

14

es muy simple:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this,R.color.white));// set status background white

y viceversa:

getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this, R.color.black));
View decorView = getWindow().getDecorView(); //set status background black 
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //set status text  light

4

Como en el caso anterior, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR hace el trabajo en mi caso, no olvide configurarlo para una API 22.

agregue esto para oncreate después de setContentView:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

1
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark

getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimaryDark));// set status background white

Esto funciona para mi


Esto requiere un nivel de API 23+.
kanji

0

Pruebe esto una vez.

En tu onCreate()método de actividad , pega el siguiente código.

try {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(ContextCompat.getColor(this, R.color.color_red));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

Nota: color_red: es el color de la barra de estado.


2
La pregunta es sobre el color del texto de la barra de estado, no sobre el fondo de la barra de estado.
kanji

0

En su onCreate()método de actividad , pegue el siguiente código después de lasetContentView(R.layout.activity_generic_main);

Aquí está el código de muestra a continuación.

public class GenericMain extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generic_main);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

    }
}

0

Prueba esto si no es la página de bienvenida

getActivity (). getWindow (). clearFlags (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity (). getWindow (). getDecorView (). setSystemUiVisibility (Ver.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | Ver.SYSTEM_UI_FLAG_LAYOUT_STABLE | Ver.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getActivity (). getWindow (). addFlags (WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getActivity (). getWindow (). setNavigationBarColor (ContextCompat.getColor (context, R.color.white));
getActivity (). getWindow (). setStatusBarColor (ContextCompat.getColor (contexto, R.color.white));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.