Làm cách nào để thay đổi màu thanh trạng thái để phù hợp với ứng dụng trong Lollipop? [Android]


96

Trong bản cập nhật kẹo mút mới, tôi nhận thấy rằng với các ứng dụng gốc của Google, màu sắc của thanh trạng thái sẽ thay đổi để phù hợp với thanh tác vụ trên ứng dụng bạn đang chạy. Tôi cũng thấy nó trên ứng dụng Twitter nên tôi đoán không chỉ riêng Google mới có thể làm được.

Có ai biết làm thế nào để làm điều này nếu nó là có thể?

Câu trả lời:


220

Để thay đổi màu thanh trạng thái, hãy sử dụng setStatusBarColor (int color) . Theo javadoc, chúng ta cũng cần đặt một số cờ trên cửa sổ.

Đoạn mã hoạt động:

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


Lưu ý rằng theo hướng dẫn của Material Design, màu thanh trạng thái và màu thanh tác vụ phải khác nhau:

  • ActionBar nên sử dụng màu chính 500
  • StatusBar nên sử dụng màu chính 700

Nhìn vào ảnh chụp màn hình bên dưới:

nhập mô tả hình ảnh ở đây


4
Lưu ý rằng hiệu ứng có thể không hiển thị trong trình giả lập. Ví dụ: dự án mẫu này tô màu thanh trạng thái trên Nexus 9 nhưng không tô màu trên trình giả lập Android 5.0.
CommonsWare

1
@mate: Tôi đang đề cập đến trình giả lập Android SDK. Thật tốt khi biết rằng nó đang hoạt động trên Genymotion.
CommonsWare

3
@Azad Không, không. Để sử dụng đoạn mã trên, bạn phải đảm bảo rằng thiết bị của mình chạy trên API 21 trở lên.
klimat

1
Tôi đang thực hiện một dự án tương đối đơn giản và tôi phải nói rằng tôi vừa mới sử dụng getWindow().setStatusBarColor(activity.getResources().getColor(R.color.example_color));và nó hoạt động hoàn hảo. Không chắc chắn về bối cảnh mà cờ là cần thiết.
Joaquin Iurchuk

3
Tôi cũng muốn hiển thị màu trong các thiết bị trước kẹo mút. Nó được hoàn thiện bằng cách nào?
WISHY

48

Chỉ cần thêm cái này vào bạn styles.xml. ColorPrimary dành cho thanh tác vụ và colorPrimaryDark dành cho thanh trạng thái.

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

Hình ảnh này từ nhà phát triển android giải thích thêm về bảng màu. Bạn có thể đọc thêm trên liên kết này .

nhập mô tả hình ảnh ở đây


Android Studio tạo các mục sau cho mỗi dự án: <color name="colorPrimary">#somecolor</color><color name="colorPrimaryDark">#somecolor</color>. Chúng có thể được thay đổi để đạt được hiệu quả mong muốn.
Neurotransmitter

41

Một cách khác để đặt màu thanh trạng thái là thông qua style.xml .

Để làm điều đó, tạo ra một style.xml tập tin dưới res / values-v21 thư mục với nội dung này:

<?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>

Chỉnh sửa: như đã chỉ ra trong nhận xét, khi sử dụng AppCompat, mã sẽ khác. Trong tệp res / values ​​/ style.xml, hãy sử dụng thay thế:

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

1
Đã làm điều đó. Nhưng không hoạt động. Nhưng sau đó tôi sử dụng AppCompat thay vì Material.
Martin

3
@Martin Đối với appcompat, hãy sử dụng colorPrimaryDark mà không có tiền tố android.
Michiel

cũng không hoạt động cho appcompat (được thử nghiệm ở Cấp độ 18)
Mohammad Zekrallah

Màu thanh trạng thái sẽ chỉ hoạt động trên các thiết bị có API OS Cấp 21 trở lên. Ngoài ra, trong tệp kê khai của bạn, hãy đảm bảo rằng bạn không ghi đè kiểu này lên các hoạt động cá nhân.
Levon

cho inappbrowser làm thế nào để thay đổi màu sắc thanh tìm kiếm tương tự như màu sắc ứng dụng
R.Anandan

23

Để đặt màu thanh trạng thái, hãy tạo tệp style.xml trong thư mục res / values-v21 với nội dung sau:

<?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>

nó nói không thể giải quyết windowDrawsSystemBarBackgrounds biểu tượng
jmhostalet

4

Thêm dòng này theo kiểu v21 nếu bạn sử dụng hai kiểu.

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

Điều này không hoạt động nếu không đặt cờandroid:windowDrawsSystemBarBackgrounds
Slav

4

Ngoài ra, nếu bạn muốn có status-barmàu khác cho các hoạt động khác nhau ( các đoạn ), bạn có thể thực hiện theo các bước sau (làm việc trên API 21 trở lên):

Trước tiên, hãy tạo values21/style.xmlvà đặt mã sau:

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

Sau đó, xác định các chủ đề Trắng | Tối values/style.xmltheo cách sau của bạn :

 <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>

Cũng đừng quên áp dụng các chủ đề trong của bạn manifest.xml.


2

Trong các thiết bị Android trước Lollipop, bạn có thể làm điều đó từ SystemBarTintManager Nếu bạn đang sử dụng android studio, chỉ cần thêm Systembartint lib vào tệp gradle của bạn.

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

Sau đó trong hoạt động của bạn

// 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));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.