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

MarcForn
fuente

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>
Jon
fuente
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);
MG
fuente
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
Vasily G
fuente
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);
}
Maher
fuente
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

Mudassar
fuente
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.

Surendar D
fuente
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);

    }
}
Adnan
fuente
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));
usuario5071155
fuente