PrimaryDark beyaz olduğunda durum çubuğu metin rengini değiştir


90

Google Takvim uygulamasının davranışını yeniden oluşturmaya çalışıyorum: görüntü açıklamasını buraya girin

ancak durum metni rengini değiştirmenin bir yolunu bulamadım. ColorPrimaryDark'ı beyaz olarak ayarlarsam, ne simgeleri ne de renkleri beyaz olduğundan durum çubuğundaki metinleri göremiyorum.

Durum çubuğu metin rengini değiştirmenin herhangi bir yolu var mı?

Şimdiden teşekkürler

Yanıtlar:


182

Hangi API düzeyini hedeflemeye çalıştığınızdan emin değilim, ancak API 23'e özgü öğeleri kullanabilirseniz, aşağıdakileri AppTheme styles.xml dosyanıza ekleyebilirsiniz:

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

ne zaman android:windowLightStatusBartrue olarak ayarlanır durum çubuğu rengi beyazdır ve ne zaman tersi olduğunda, durum çubuğu metin rengi görülebilir mümkün olacak android:windowLightStatusBarfalse olarak ayarlanır, durum çubuğu metin rengi durum çubuğu rengi olduğunda görülecek dizayn edilecektir karanlık.

Misal:

<!-- 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
API seviyem 21 ise işe yaramıyor bunun için alternatifi söyleyebilir misiniz
saikrupa

8
Api 21 için herhangi bir çözüm bulundu. Lütfen yardım edin?
iMDroid

2
Not: android: windowLightStatusBar, API seviyesi 23 gerektirir (şu anki dakika 21) daha fazla ... (⌘F1)
Hardik Darji

API 21 için bu mümkün değildir. Google uygulamalarında beyaz yerine siyah bir çubuktur.
Joris

1
API Seviyesi <23 için bu
gönderiye bakın

31

bunu programlı olarak bu cevap gibi yapabilirsiniz

sadece bunu ekle

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

setSystemUiVisibility kullanımdan kaldırıldı
Luca Ziegler

14

çok basit:

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

ve tam tersi:

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

Daha önce olduğu gibi, benim durumumda SYSTEM_UI_FLAG_LIGHT_STATUS_BAR işi yapıyor, API 22'den daha yüksek bir değere ayarlamayı unutmayın.

setContentView'dan sonra bunu oncreate'e ekleyin:

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

Benim için çalışıyor


Bu, API seviyesi 23+ gerektirir.
kanji

2

Etkinlik onCreate()yönteminizde, aşağıdaki kodusetContentView(R.layout.activity_generic_main);

İşte aşağıdaki örnek kod.

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

Bunu bir kez dene.

Aktivite onCreate()yönteminize aşağıdaki kodu yapıştırın.

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

Not: color_red - durum çubuğu rengidir.


2
Soru, durum çubuğunun arka planı değil, durum çubuğunun metin rengiyle ilgilidir.
kanji

0

Sıçrama sayfası değilse bunu deneyin

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));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.