Zmień kolor tekstu paska stanu, gdy primaryDark jest biały

87

Próbuję odtworzyć zachowanie aplikacji Kalendarz Google: wprowadź opis obrazu tutaj

ale nie znalazłem sposobu na zmianę koloru tekstu statusu. Jeśli ustawię colorPrimaryDark na biały, nie widzę ikon ani tekstu na pasku stanu, ponieważ ich kolor również jest biały.

Czy istnieje sposób na zmianę koloru tekstu paska stanu?

Z góry dziękuję

MarcForn
źródło

Odpowiedzi:

174

Nie jestem pewien, na jaki poziom API chcesz się kierować, ale jeśli możesz użyć rzeczy specyficznych dla API 23, możesz dodać następujące elementy do swojego AppTheme styles.xml:

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

gdy android:windowLightStatusBarjest ustawione na true, kolor tekstu paska stanu będzie widoczny, gdy kolor paska stanu jest biały i odwrotnie, gdy android:windowLightStatusBarjest ustawiony na false, kolor tekstu paska stanu zostanie zaprojektowany tak, aby był widoczny, gdy kolor paska stanu jest ciemny.

Przykład:

<!-- 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
źródło
38
jeśli mój poziom api to 21, to nie działa, czy możesz mi podać alternatywę
saikrupa
8
Znaleźliśmy jakieś rozwiązanie dla Api 21. Proszę o pomoc?
iMDroid
1
Uwaga: android: windowLightStatusBar wymaga API na poziomie 23 (aktualny min to 21) więcej ... (⌘F1)
Hardik Darji
W przypadku interfejsu API 21 nie jest to możliwe. W aplikacjach Google jest to raczej czarny pasek niż biały.
Joris
1
Zobacz ten post dla poziomu API <23: stackoverflow.com/questions/49254877/…
Basti Vagabond
30

możesz to zrobić programowo, jak ta odpowiedź

po prostu dodaj to

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
MG
źródło
14

to jest bardzo proste:

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

i wzajemnie:

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
Wasilij G.
źródło
4

Jak poprzednio, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR wykonuje pracę w moim przypadku, nie zapomnij ustawić na wyższą niż API 22.

dodaj to do oncreate po setContentView:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
Maher
źródło
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

Mi to pasuje

Mudassar
źródło
Wymaga to poziomu API 23+.
kanji
0

Spróbuj tego raz.

W swojej onCreate()metodzie działania wklej następujący kod.

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();
        }

Uwaga: color_red - to kolor paska stanu.

Surendar D.
źródło
2
Pytanie dotyczy koloru tekstu paska stanu, a nie tła paska stanu.
kanji
0

W swojej onCreate()metodzie działania wklej następujący kod posetContentView(R.layout.activity_generic_main);

Oto przykładowy kod poniżej.

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
źródło
0

Spróbuj tej strony powitalnej, jeśli nie

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));
user5071155
źródło