Cambia il colore del testo della barra di stato quando primaryDark è bianco


90

Sto cercando di riprodurre il comportamento dell'applicazione Google Calendar: inserisci qui la descrizione dell'immagine

ma non ho trovato un modo per cambiare il colore del testo di stato. Se imposto colorPrimaryDark come bianco non riesco a vedere le icone né il testo della barra di stato perché anche il loro colore è bianco.

C'è un modo per cambiare il colore del testo della barra di stato?

Grazie in anticipo

Risposte:


182

Non sono sicuro del livello API che stai cercando di indirizzare, ma se puoi utilizzare elementi specifici dell'API 23, puoi aggiungere quanto segue al tuo AppTheme styles.xml:

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

quando android:windowLightStatusBarè impostato su true, il colore del testo della barra di stato potràessere visto quando il colore della barra di stato è bianco, e viceversa quando android:windowLightStatusBarè impostato su false, il colore del testo della barra di stato sarà progettato per essere visto quando il colore della barra di stato è buio.

Esempio:

<!-- 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>

39
se il mio livello API è 21 non funziona, puoi dirmi l'alternativa per quello
saikrupa

8
Qualche soluzione trovata per Api 21. Per favore aiuto?
iMDroid

2
Nota: android: windowLightStatusBar richiede il livello API 23 (il minimo attuale è 21) altro ... (⌘F1)
Hardik Darji

Per api 21 questo non è possibile. Nelle applicazioni Google è una barra nera anziché bianca.
Joris

1
Vedi questo post per il livello API <23: stackoverflow.com/questions/49254877/…
Basti Vagabond

31

puoi farlo in modo programmatico come questa risposta

basta aggiungere questo

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

setSystemUiVisibility è deprecato
Luca Ziegler

14

è molto semplice:

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

e 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

Come in precedenza, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR fa il lavoro nel mio caso, non dimenticare di impostare un valore superiore all'API 22.

aggiungilo a oncreate dopo setContentView:

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

2
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

Per me funziona


Ciò richiede il livello API 23+.
kanji

2

Nel onCreate()metodo dell'attività , incolla il codice seguente dopo il filesetContentView(R.layout.activity_generic_main);

Di seguito è riportato il codice di esempio.

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

Prova questa volta.

Nel tuo onCreate()metodo di attività , incolla il seguente codice.

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 - è il colore della barra di stato.


2
La domanda riguarda il colore del testo della barra di stato, non lo sfondo della barra di stato.
kanji

0

Prova questo se non splash page

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.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(context, R.color.white));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.