Ubah warna teks bilah status saat primaryDark berwarna putih


89

Saya mencoba mereproduksi perilaku aplikasi Google Kalender: masukkan deskripsi gambar di sini

tetapi saya belum menemukan cara untuk mengubah warna teks status. Jika saya menyetel colorPrimaryDark sebagai putih, saya tidak dapat melihat ikon maupun teks dari bilah status karena warnanya juga putih.

Apakah ada cara untuk mengubah warna teks bilah status?

Terima kasih sebelumnya

Jawaban:


181

Saya tidak yakin level API apa yang Anda coba targetkan, tetapi jika Anda dapat menggunakan API 23 hal-hal tertentu, Anda dapat menambahkan yang berikut ini ke AppTheme styles.xml:

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

Jika android:windowLightStatusBardisetel ke true, warna teks bilah status akan dapat dilihat saat warna bilah status putih, begitu pula sebaliknya jika android:windowLightStatusBardisetel ke false, warna teks bilah status akan didesain agar terlihat saat warna bilah status gelap.

Contoh:

<!-- 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
jika api saya level 21 itu tidak berfungsi, bisakah Anda memberi tahu saya alternatif untuk itu
saikrupa

8
Ada solusi yang ditemukan untuk Api 21. Tolong bantu?
iMDroid

2
Catatan: android: windowLightStatusBar membutuhkan API level 23 (minimum saat ini 21) lebih ... (⌘F1)
Hardik Darji

Untuk api 21 ini tidak mungkin. Dalam aplikasi Google, ini adalah bilah hitam, bukan putih.
Joris

1
Lihat posting ini untuk API Level <23: stackoverflow.com/questions/49254877/…
Basti Vagabond

31

Anda dapat melakukannya secara terprogram seperti jawaban ini

tambahkan saja ini

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

setSystemUiVisibility tidak digunakan lagi
Luca Ziegler

14

itu sangat sederhana:

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

dan sebaliknya:

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

Seperti sebelumnya, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR melakukan pekerjaan dalam kasus saya, jangan lupa untuk mengatur lebih tinggi dari API 22.

tambahkan ini ke oncreate setelah 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

Ini bekerja untuk saya


Ini membutuhkan API level 23+.
kanji

1

Dalam onCreate()metode aktivitas Anda , tempel kode berikut setelahsetContentView(R.layout.activity_generic_main);

Berikut adalah contoh kode di bawah ini.

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

Coba ini sekali.

Dalam onCreate()metode aktivitas Anda , tempel kode berikut.

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

Catatan: color_red - adalah warna bilah status.


2
Pertanyaannya adalah tentang warna teks dari bilah status, bukan latar belakang bilah status.
kanji

0

Coba ini jika bukan halaman splash

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));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.