Bagaimana cara mengubah warna bilah status di Android?

427

Pertama-tama ini bukan duplikat seperti pada Bagaimana mengubah warna latar belakang status bar android

Bagaimana cara mengubah warna bilah status yang seharusnya sama dengan di bilah navigasi.

Saya ingin warna bilah status sama dengan warna bilah navigasi

masukkan deskripsi gambar di sini

codercat
sumber
2
hanya mungkin setelah kitkat @MarkBuikema
codercat
4
Seperti yang disarankan Niels, ada ATRIBUT TEMA sejak v21 disebut android:statusBarColor. Anda bisa menambahkannya ke values-v21/styles.xml.
Levite
@MarkBuikema Bagaimana itu terkait dengan akses root!
steve moretz

Jawaban:

625

Android 5.0 Lollipop memperkenalkan tema Desain Bahan yang secara otomatis mewarnai bilah status berdasarkan colorPrimaryDarknilai tema.

Ini didukung pada perangkat pre-lollipop berkat dukungan perpustakaan-v7-appcompat mulai dari versi 21. Blogpost tentang dukungan appcompat v21 dari Chris Banes

masukkan deskripsi gambar di sini

Baca lebih lanjut tentang Tema Bahan di situs web resmi Pengembang Android

Giorgio
sumber
29
dalam beberapa alasan atribut colorPrimaryDark tidak bekerja untuk saya. mencoba emulator v21
menyimpang
3
Ini berfungsi, Anda harus melihat perubahan pada emulator bukan pada pratinjau tata letak [tidak ditampilkan di sana]
Mightian
6
colorPrimaryDark tidak bekerja untuk saya baik pada emulator API 18. Dari artikel yang ditautkan tentang appcompat: "Pada platform lama, AppCompat mengemulasi tema warna jika memungkinkan. Saat ini ini terbatas pada pewarnaan action bar dan beberapa widget."
Adam Johns
12
Bagaimana dengan mengubah warna font di bilah status? Dokter tidak mengatakan apa-apa tentang itu.
Scott Biggs
Saya mencoba dengan cara yang sama. ini berfungsi dengan baik di sebagian besar semua perangkat, tetapi saya memiliki samsung galaxy s4 yang menjalankan OS 5.0.1 dan dalam bilah status ponsel ini warnanya hitam. Dan begitu saya pergi ke aktivitas lain dan kembali lagi ke aktivitas sebelumnya, warna bilah status saya diubah menjadi warna tema aplikasi. Alasan mengapa ini terjadi
Hitesh Kamani
364

Memperbarui:

Lollipop:

public abstract void setStatusBarColor (int color)

Ditambahkan dalam API level 21

Android Lollipop menghadirkan kemampuan untuk mengubah warna bilah status di aplikasi Anda untuk pengalaman pengguna yang lebih mendalam dan selaras dengan Google Material Design Guidelines.

Inilah cara Anda dapat mengubah warna bilah status menggunakan window.setStatusBarColormetode baru yang diperkenalkan API level 21.

Mengubah warna bilah status juga memerlukan pengaturan dua bendera tambahan pada Jendela; Anda perlu menambahkan FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDSbendera dan menghapus FLAG_TRANSLUCENT_STATUSbendera.

Kode Kerja:

import android.view.Window;

...

Window window = activity.getWindow();

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

Referensi pengembang resmi: setStatusBarColor (int)

Contoh: bahan-desain-di mana-mana

Chris Banes Blog- appcompat v21: desain material untuk perangkat pra-Lollipop!

masukkan deskripsi gambar di sini

Untuk transitionNamelatar belakang tampilan akan android:status:background.

codercat
sumber
2
Ada solusi untuk kompatibilitas mundur?
Adam Hurwitz
Seperti disebutkan dalam jawaban oleh Niels: Anda juga dapat mengonfigurasi warna bilah status melalui tema / gaya dengan mengatur file android:statusBarColorAnda values-v21/styles.xmlper androiddocs.com/training/material/theme.html seperti itu<item name="android:statusBarColor">@color/primary_color</item>
JL West
4
saya dapat mengubah warna bilah status menjadi putih, tetapi saya tidak dapat melihat ikon pemberitahuan seperti batery, bagaimana saya bisa menyelesaikannya?
MNFS
1
Anda tidak tahu seberapa besar Anda hanya membantu saya ..
Abhishek Dhyani
222

Tempatkan ini adalah values-v21 / styles.xml Anda, untuk mengaktifkannya di Lollipop:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>
Niels
sumber
34
ini membutuhkan min API 21
Roman
49
Ini mungkin sebabnya dia menyarankan untuk memasukkannya ke dalam values-v21 / styles.xml ;-) Tampaknya ini jawaban yang paling akurat !!
Levite
Tapi ini masih memberi peringatan !!?
Nihal Sharma
apa fungsi untuk compat? status bar
blackHawk
Anda dapat menambahkan targeApiatribut jika Anda ingin mempertahankan file gaya tunggal. Baca jawaban saya untuk referensi stackoverflow.com/a/48565459/4291272
Faisal Shaikh
50

ini cara yang sangat mudah untuk melakukan ini tanpa Library: jika versi OS tidak didukung - di bawah kitkat - jadi tidak ada yang terjadi. saya melakukan langkah-langkah ini:

  1. di xml saya, saya menambahkan ke bagian atas Tampilan ini:
<View
        android:id="@+id/statusBarBackground"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

maka saya membuat metode ini:

 public void setStatusBarColor(View statusBar,int color){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
           Window w = getWindow();
           w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
           //status bar height
           int actionBarHeight = getActionBarHeight();
           int statusBarHeight = getStatusBarHeight();
           //action bar height
           statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
           statusBar.setBackgroundColor(color);
     }
}

Anda juga memerlukan kedua metode tersebut untuk mendapatkan tinggi tindakan & status bar:

public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
       actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

maka satu-satunya yang Anda butuhkan adalah baris ini untuk mengatur warna bilah status:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));
itzhar
sumber
1
di mana saya harus meletakkan elemen tampilan? haruskah itu berada di atas tata letak utama?
Emil Reña Enriquez
Iya. Di xml Anda. Di atasnya.
itzhar
Perhatian: Hanya berfungsi untuk android> = 19 API. Dalam kasus saya, saya memerlukan dukungan mulai dari 16
Anton Kizema
setStatusBarColor (findViewById (android.R.id.statusBarBackground), getResources (). getColor (android.R.color.white));
AndroidLad
34

Seperti yang dikatakan @Niels, Anda harus menempatkan pada values-v21 / styles.xml:

<item name="android:statusBarColor">@color/black</item>

Tapi tambahkan tools:targetApi="lollipop" jika Anda ingin styles.xml tunggal, seperti:

<item name="android:statusBarColor" tools:targetApi="lollipop">@color/black</item>
Faisal Shaikh
sumber
3
Terima kasih banyak untuk "targetApi". Saya tidak suka tema saya tersebar di beberapa file. :)
plexus
31

Yah, solusi Izhar baik-baik saja tetapi, secara pribadi, saya mencoba untuk menghindari kode yang terlihat seperti ini:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//Do what you need for this SDK
};

Juga, saya juga tidak suka menggandakan kode. Dalam jawaban Anda, saya harus menambahkan baris kode tersebut di semua Aktivitas:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

Jadi, saya mengambil solusi Izhar dan menggunakan XML untuk mendapatkan hasil yang sama: Buat tata letak untuk StatusBar status_bar.xml

<View xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/statusBarHeight"
     android:background="@color/primaryColorDark"
     android:elevation="@dimen/statusBarElevation">

Perhatikan atribut ketinggian dan ketinggian, ini akan diatur dalam nilai, nilai-v19, nilai-v21 lebih jauh ke bawah.

Tambahkan tata letak ini ke tata letak aktivitas Anda menggunakan include, main_activity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Black" >

<include layout="@layout/status_bar"/>
<include android:id="@+id/app_bar" layout="@layout/app_bar"/>
//The rest of your layout       
</RelativeLayout>

Untuk Bilah Alat, tambahkan atribut margin atas:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@color/primaryColor"
app:theme="@style/MyCustomToolBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:elevation="@dimen/toolbarElevation"
android:layout_marginTop="@dimen/appBarTopMargin"
android:textDirection="ltr"
android:layoutDirection="ltr">

Di appTheme style-v19.xml dan styles-v21.xml Anda, tambahkan windowTranslucent attr:

styles-v19.xml, v21:

<resources>
<item name="android:windowTranslucentStatus">true</item>
</resources>

Dan akhirnya, pada dimens Anda, dimens-v19, dimens-v21, tambahkan nilai untuk Toolbar topMargin, dan ketinggian statusBarHeight: dimens.xml kurang dari KitKat:

<resources>
<dimen name="toolbarElevation">4dp</dimen>
<dimen name="appBarTopMargin">0dp</dimen>
<dimen name="statusBarHeight">0dp</dimen>
</resources>

Tinggi status bar selalu 24dp dimens-v19.xml untuk KitKat dan di atasnya:

<resources>
<dimen name="statusBarHeight">24dp</dimen>
<dimen name="appBarTopMargin">24dp</dimen>
</resources>

dimens-v21.xml untuk Lolipop, cukup tambahkan elevasi jika diperlukan:

<resources>
<dimen name="statusBarElevation">4dp</dimen>
</resources>

Ini adalah hasil untuk Jellybean KitKat dan Lollipop:

masukkan deskripsi gambar di sini

Moti Bartov
sumber
Jadi, alih-alih memasukkan kode cek, Anda memasukkannya ke XML. Solusi Anda akan bekerja pada Kitkat, seperti apa yang dia dapatkan.
Pengembang android
26

Anda dapat menggunakan kode sederhana ini:

Satu kalimat di Kotlin:

window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)

Jawaban asli dengan Java & versi manual periksa:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light, this.getTheme()));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light));
}
steve moretz
sumber
Anda selanjutnya dapat menyederhanakan ini dengan menggunakan ContextCompat. Di Kotlin kemudian hanya ini:window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)
sunadorer
Pada saat saya menulisnya, saya belum mencoba kotlin. Mengapa Anda tidak mengedit jawaban dan saya dapat menyetujuinya :)
steve moretz
Ide bagus. Saya telah memasukkan saran saya dalam jawaban sebagai referensi mudah bagi pengunjung masa depan
sunadorer
warna bilah status berubah di atas Build.VERSION_CODES.M. tidak bekerja di bawah Lollipop
Muhammed Haris
@MuhammedHaris tidak berhasil. Apakah Anda menggunakan kode kotlin atau java?
steve moretz
23

Cukup buat tema baru di res / values ​​/ styles.xml tempat Anda mengubah "colorPrimaryDark" yang merupakan warna bilah status:

<style name="AppTheme.GrayStatusBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/colorGray</item>
</style>

Dan ubah tema aktivitas di AndroidManifest.xml ke yang Anda inginkan, pada aktivitas berikutnya Anda dapat mengubah warna kembali ke yang asli dengan memilih tema aslinya:

<activity
    android:name=".LoginActivity"
    android:theme="@style/AppTheme.GrayStatusBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Beginilah tampilan res / values ​​/ colors.xml Anda :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#c6d6f0</color>
    <color name="colorGray">#757575</color>
</resources>
Bandingkan
sumber
1
Saya pikir ini adalah solusi paling sederhana namun terbersih. Tidak perlu memiliki level API minimum 21 , cukup meng-override sederhana. Layak mendapat suara terbanyak.
tahsinRupam
Ini tidak berfungsi ketika berjalan pada level Nougat dan api diatur ke 19. Itu berhasil jika saya mengatur tema android: di bawah node aplikasi di manifes.
AndroidDev
18

Untuk mengubah warna lolipop di atas cukup tambahkan ini ke styles.xml Anda

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

tetapi ingat , jika Anda ingin memiliki warna terang untuk bilah status, tambahkan baris ini juga

<item name="android:windowLightStatusBar">true</item>
Amin Keshavarzian
sumber
1
Terima kasih, itu jawaban yang berguna juga.
Andrew Grow
16

Anda dapat mengubah warna bilah status dengan fungsi ini. bekerja di android L berarti API 21 dan lebih tinggi dan membutuhkan string warna seperti "#ffffff".

private void changeStatusBarColor(String color){
    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.parseColor(color));
    }
}
sajad abbasi
sumber
15

Saya memiliki persyaratan ini: Mengubah secara terprogram warna status bar menjaganya transparan , untuk memungkinkan Navigasi Drawer untuk menggambar dirinya tumpang tindih bilah status trasparent.

Saya tidak bisa melakukan itu menggunakan API

getWindow().setStatusBarColor(ContextCompat.getColor(activity ,R.color.my_statusbar_color)

Jika Anda memeriksa di sini di stack overflow semua orang sebelum baris kode mengatur transparansi bilah status menjadi solid

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

Saya dapat mengelola warna dan transparansi bilah status seperti ini:

  • Android 4: tidak banyak yang dapat Anda lakukan, karena Anda tidak dapat mengelola warna bilah status dari API ... satu-satunya hal yang dapat Anda lakukan adalah mengatur bilah status sebagai tembus dan memindahkan elemen berwarna UI Anda di bawah status batang. Untuk melakukan ini, Anda harus bermain

    android:fitsSystemWindows="false"

    dalam tata letak utama Anda. Ini memungkinkan Anda untuk menggambar tata letak Anda di bawah bilah status. Maka Anda perlu bermain dengan beberapa bantalan dengan bagian atas tata letak utama Anda.

  • Android 5 dan di atasnya: Anda harus mendefinisikan gaya dengan

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>

    ini memungkinkan laci navigasi untuk tumpang tindih bilah status.

    Kemudian untuk mengubah warna menjaga bilah status transparan Anda harus mengatur warna bilah status dengan

    drawerLayout.setStatusBarBackgroundColor(ContextCompat.getColor(activity, R.color.my_statusbar_color))

    di mana drawerLayout didefinisikan seperti ini

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
DSoldo
sumber
Itu bekerja untuk saya tanpa <item name="android:windowDrawsSystemBarBackgrounds">true</item>. Bagaimanapun, setelah pencarian selama berhari-hari, saya menemukan sesuatu yang benar-benar berfungsi (hanya diuji pada Lolllipop untuk saat ini). Terima kasih
DenisGL
saya mengalami masalah yang sama dan jawaban Anda membantu saya untuk menyelesaikan ini.
A.Gun
7

Edit colorPrimary di colors.xml dalam Values ​​ke warna yang Anda inginkan menjadi Status Bar. Sebagai contoh:

   <resources>
<color name="colorPrimary">#800000</color> // changes the status bar color to Burgundy
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="red">#FF0000</color>
<color name="white">#FFFFFF</color>
<color name="cream">#fffdd0</color>
<color name="burgundy">#800000</color>

Philip
sumber
7

Untuk Mengubah warna bilah status, buka res/values-v21/styles.xmldan warna bilah status

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">#0000FF</item>
    </style>
</resources>
kekuatan radhason
sumber
Hei, bisakah kamu membantu saya? Saya tidak tahu tentang Android dan saya tidak bisa mulai belajar sekarang. Saya memiliki penyihir aplikasi sederhana yang menjalankan file html. Saya ingin sekali mengubah warna bilah status karena bagian atas dan bawah pada # 000 itu mengerikan bagi palete saya. Tapi saya tidak bisa, saya bahkan tidak bisa menemukan file styles.xml ... Jika saya bisa mengirimkan apk saya dan Anda mengaturnya untuk saya, saya akan sangat berterima kasih fckng!
Thiago Soubra
6

Jika Anda ingin mengubah warna bilah status secara terprogram (dan asalkan perangkat memiliki Android 5.0). Ini adalah cara sederhana untuk mengubah statusBarColor dari Kegiatan apa pun dan metode yang sangat mudah ketika fragmen yang berbeda memiliki warna bilah status yang berbeda.

 /**
 * @param colorId id of color
 * @param isStatusBarFontDark Light or Dark color
 */
fun updateStatusBarColor(@ColorRes colorId: Int, isStatusBarFontDark: Boolean = true) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val window = window
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = ContextCompat.getColor(this, colorId)
        setSystemBarTheme(isStatusBarFontDark)
    }
}

/** Changes the System Bar Theme.  */
@RequiresApi(api = Build.VERSION_CODES.M)
private fun setSystemBarTheme(isStatusBarFontDark: Boolean) {
    // Fetch the current flags.
    val lFlags = window.decorView.systemUiVisibility
    // Update the SystemUiVisibility depending on whether we want a Light or Dark theme.
    window.decorView.systemUiVisibility = if (isStatusBarFontDark) lFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() else lFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
Nabin
sumber
5

Jika Anda ingin bekerja di Android 4.4 dan di atasnya, coba ini. Saya merujuk pada jawaban Harpreet dan tautan ini. Android dan bilah status transparan

Pertama, panggil metode setStatusBarColored dalam metode onCreate Activity (saya letakkan di kelas util). Saya menggunakan gambar di sini, Anda dapat mengubahnya untuk menggunakan warna.

public static void setStatusBarColored(Activity context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        Window w = context.getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        int statusBarHeight = getStatusBarHeight(context);

        View view = new View(context);
        view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        view.getLayoutParams().height = statusBarHeight;
        ((ViewGroup) w.getDecorView()).addView(view);
        view.setBackground(context.getResources().getDrawable(R.drawable.navibg));
    }
}

public static int getStatusBarHeight(Activity context) {
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

Sebelum: sebelum

Setelah: setelah

Warna bilah status telah diubah, tetapi bilah navi terpotong, jadi kita perlu mengatur margin atau offset bilah navi dalam metode onCreate.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, (int)(this.getResources().getDimension(R.dimen.navibar_height)));
        layoutParams.setMargins(0, Utils.getStatusBarHeight(this), 0, 0);

        this.findViewById(R.id.linear_navi).setLayoutParams(layoutParams);
    }

Maka bilah status akan terlihat seperti ini.

status bar

Allan
sumber
4

Inilah yang bekerja untuk saya di KitKat dan dengan hasil yang baik.

public static void setTaskBarColored(Activity context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        {
            Window w = context.getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //status bar height
            int statusBarHeight = Utilities.getStatusBarHeight(context);

            View view = new View(context);
            view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.getLayoutParams().height = statusBarHeight;
            ((ViewGroup) w.getDecorView()).addView(view);
            view.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryTaskBar));
        }
    }
Harpreet
sumber
2

Satu lagi solusi:

final View decorView = w.getDecorView();
View view = new View(BaseControllerActivity.this);
final int statusBarHeight = UiUtil.getStatusBarHeight(ContextHolder.get());
view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
view.setBackgroundColor(colorValue);
((ViewGroup)decorView).addView(view);
Vova K.
sumber
Apakah ini akan berfungsi pada tablet di mana bilah status di bagian bawah layar?
guy.gc
6
ada apa 'dan' UiUtil 'di sini?
Manav Patadia
2

ubah colorPrimaryDark ke warna keinginan Anda menjadi file res / values ​​/ styles.xml

    <resources>
        <color name="colorPrimary">#800000</color>
        <color name="colorPrimaryDark">#303F9F</color> //This Line
        <color name="colorAccent">#FF4081</color>
        <color name="red">#FF0000</color>
        <color name="white">#FFFFFF</color>
       <color name="cream">#fffdd0</color>
       <color name="burgundy">#800000</color>
    </resources>
Engr Syed Rowshan Ali
sumber