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

MarcForn
sumber

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>
Jon
sumber
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);
MG
sumber
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
Mudah G
sumber
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);
}
Maher
sumber
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

Mudassar
sumber
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);

    }
}
Adnan
sumber
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.

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