Pertanyaan Bagaimana cara mengubah warna bar status agar sesuai dengan aplikasi di Lollipop? [Android]


Dalam pembaruan lollipop baru, saya perhatikan bahwa dengan aplikasi Google asli, warna bilah status berubah agar sesuai dengan bilah tindakan pada aplikasi yang Anda jalankan. Saya melihat itu di aplikasi Twitter juga jadi saya kira itu bukan hanya Google yang bisa melakukannya.

Adakah yang tahu cara melakukan ini jika mungkin?


90
2017-11-23 19:28


asal


Jawaban:


Untuk mengubah penggunaan warna bar status setStatusBarColor (int color). Menurut javadoc, kita juga perlu mengatur beberapa bendera di jendela.

Potongan kode kerja:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


Mengingat sesuai pedoman Desain Material warna bar status dan warna bilah tindakan harus berbeda:

  • ActionBar harus menggunakan warna utama 500
  • Status bar harus menggunakan 700 warna utama

Lihatlah gambar di bawah ini:

enter image description here


213
2017-11-23 19:32



Cukup tambahkan ini di styles.xml Anda. ColorPrimary adalah untuk bilah tindakan dan colorPrimaryDark adalah untuk bilah status.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>

Gambar ini dari pengembang android menjelaskan lebih banyak tentang pallete warna. Anda dapat membaca lebih lanjut tentang ini link.

enter image description here


45
2017-08-25 10:15



Cara lain untuk mengatur warna bar status adalah melalui style.xml.

Untuk melakukan itu, buat a style.xml file di bawah res / values-v21 folder dengan konten ini:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

Edit: seperti yang ditunjukkan dalam komentar, ketika menggunakan AppCompat kode berbeda. Dalam file res / values ​​/ style.xml gunakan sebagai gantinya:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompat’s color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>

40
2018-01-02 13:14



Untuk mengatur warna batang status, buat file style.xml di bawah folder res / values-v21 dengan konten ini:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/blue</item>
    </style>

</resources>

20
2017-07-14 09:33



Juga jika Anda ingin berbeda status-bar warna untuk aktivitas yang berbeda (fragmen) Anda dapat melakukannya dengan langkah-langkah berikut (kerjakan API 21 ke atas):

Pertama buat values21/style.xml dan letakkan kode berikut:

 <style name="AIO" parent="AIOBase">
            <item name="android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="android:windowContentTransitions">true</item>
    </style>

Kemudian tentukan tema Putih | Gelap di Anda values/style.xml seperti berikut:

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
        </item>
        <item name="android:textColor">@color/gray_darkest</item>
        <item name="android:windowBackground">@color/default_bg</item>
        <item name="android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
        </item>
    </style>

Juga jangan lupa untuk menerapkan tema di blog Anda manifest.xml.


3
2017-07-21 07:23



Di perangkat Android pra Lollipop, Anda dapat melakukannya SystemBarTintManager Jika Anda menggunakan studio android, tambahkan saja Systembartint lib di file gradle Anda.

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

Kemudian dalam aktivitas Anda

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));

2
2018-04-22 10:10



Tambahkan baris ini dalam gaya v21 jika Anda menggunakan dua gaya.

  <item name="android:statusBarColor">#43434f</item>

2
2018-01-02 06:43