Màu sắc biểu tượng thanh trạng thái Android


131

Tôi đã tự hỏi liệu có thể thay đổi màu biểu tượng của thanh trạng thái ( không phải màu của thanh trạng thái, colorPrimaryDark) nhập mô tả hình ảnh ở đây Hãy nói rằng tôi muốn thanh trạng thái này với:
<item name="colorPrimaryDark">@android:color/white</item>

và các biểu tượng màu đen, có thể?

Cảm ơn.

BIÊN TẬP:

Mới trong bản xem trước dành cho nhà phát triển M: windowLightStatusBar. Lật cái này trong chủ đề của bạn cho hệ thống sử dụng tiền cảnh tối, hữu ích cho các thanh trạng thái màu sáng hơn. Lưu ý rằng bản xem trước M dường như có một lỗi trong đó các biểu tượng thông báo vẫn có màu trắng, trong khi các biểu tượng trạng thái hệ thống thay đổi chính xác thành màu đen bán trong suốt.

từ: Roman Nurik bài đăng trên Google+ nhập mô tả hình ảnh ở đây

Câu trả lời:


24

Không kể từ Lollipop. Bắt đầu với Android 5.0, hướng dẫn cho biết:

Biểu tượng thông báo phải hoàn toàn màu trắng.

Ngay cả khi họ không phải, hệ thống sẽ chỉ xem xét kênh alpha của biểu tượng của bạn, hiển thị chúng màu trắng

Giải pháp thay thế

Cách duy nhất để có một biểu tượng màu trên Lollipop là hạ thấp targetSdkVersiongiá trị của bạn <21, nhưng tôi nghĩ bạn sẽ làm tốt hơn để làm theo hướng dẫn và chỉ sử dụng các biểu tượng màu trắng.

Tuy nhiên, nếu bạn vẫn quyết định bạn muốn các biểu tượng màu, bạn có thể sử dụng phương thức DrawableCompat.setTint từ thư viện hỗ trợ v4 mới.


3
Tôi đã thực hiện một số tìm kiếm trên google và tôi không thể tìm thấy một cách thích hợp cho việc này nhưng nếu hướng dẫn của Android nói rằng các biểu tượng phải có màu trắng, thì đó là :) Cảm ơn!
GuilhE

11
Phải có một cách giải quyết tốt hơn cho việc này. Một số ứng dụng thương mại ngoài kia đang sử dụng màu sắc. Đây là một động thái thiết kế ngu ngốc khủng khiếp của Google. Họ đã nghĩ gì nữa, nếu có?
not2qubit

Nếu bạn xem ứng dụng tin tức của Google, họ không có biểu tượng trên thanh trạng thái màu trắng: play.google.com/store/apps/iêu
Adam Hurwitz

6
<item name="android:windowLightStatusBar">true</item>đã làm cho tôi.
Adam Hurwitz

Tôi tự hỏi tại sao Ứng dụng Gmail (được phát hành vào năm 2019-04) tô màu thanh trạng thái màu trắng và các biểu tượng / văn bản màu xám đậm.
Daniel F

201

Có, bạn có thể thay đổi nó thành màu xám (không có màu tùy chỉnh) nhưng điều này chỉ hoạt động từ API 23 trở lên, bạn chỉ cần thêm cái này trong giá trị-v23 / Styles.xml của bạn

<item name="android:windowLightStatusBar">true</item>

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


2
Nhưng màu biểu tượng mục menu của nó vẫn là màu trắng làm thế nào để thay đổi màu biểu tượng mục menu của nó thành màu đen?
Mateen Chaudhry

107

@eOnOe đã trả lời làm thế nào chúng ta có thể thay đổi thanh trạng thái thông qua xml. Nhưng chúng ta cũng có thể thay đổi nó một cách linh hoạt trong mã:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    View decor = getWindow().getDecorView();
    if (shouldChangeStatusBarTintToDark) {
        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    } else {
        // We want to change tint color to white again.
        // You can also record the flags in advance so that you can turn UI back completely if
        // you have set other flags before, such as translucent or full screen.
        decor.setSystemUiVisibility(0);
    }
}

Giải pháp tốt đẹp! Nó thực sự phù hợp với ứng dụng của tôi vì tôi không phải thay đổi phiên bản SDK.
Vitor Braga

2
nó đúng hơn: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok

Điều này đã cứu ngày của tôi! Cảm ơn bạn @ywwynm!
ReGaSLZR

Đây là giải pháp tốt nhất, cũng hoạt động trên điện thoại MI. Bạn là một vị cứu tinh!
Numanqmr

xin vui lòng ShouldChangeStatusBarTintDark là gì ??
Ibramazin

48

nếu bạn có cấp API nhỏ hơn 23 thì bạn phải sử dụng theo cách này. nó làm việc cho tôi tuyên bố điều này theo v21 / phong cách .

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>

1
Ý bạn là 23. :(
meditat

Không, ý tôi là v21 / Phong cách nếu bạn không biết về điều đó hơn xin vui lòng truy cập liên kết này. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

Ngay cả khi được đặt trong tệp style.xml với vòng loại v21, điều này chỉ hoạt động trên các thiết bị chạy api 23 trở lên. Trên thực tế, AS Lint nhấn mạnh các mục này với cảnh báo rằng nó sẽ bị bỏ qua trên các phiên bản Android không hỗ trợ. Phần tools:targetApi="23"nói với Lint để ngăn chặn cảnh báo này.
Subaru Tashiro

5

Thiết windowLightStatusBarđể truekhông làm việc với điện thoại Mi, một số điện thoại Meizu, điện thoại Blackview, WileyFox vv Tôi đã tìm thấy Hack ví dụ cho các thiết bị Mi và Meizu. Đây không phải là một giải pháp toàn diện cho vấn đề nước hoa này, nhưng có lẽ nó sẽ hữu ích cho ai đó.

Và tôi nghĩ, sẽ tốt hơn nếu nói với khách hàng của bạn rằng thanh trạng thái tô màu (ví dụ) màu trắng - không phải là một ý tưởng tốt. thay vì sử dụng các cách hack khác nhau, tốt hơn là xác định phù hợp colorPrimaryDarktheo hướng dẫn


-3

Có bạn có thể thay đổi nó. nhưng trong api 22 trở lên, sử dụng NotificationCompat.Builder và setColorized (true):

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, context.getPackageName())
                .setContentTitle(title)
                .setContentText(message)
                .setSmallIcon(icon, level)
                .setLargeIcon(largeIcon)
                .setContentIntent(intent)
                .setColorized(true)
                .setDefaults(0)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setPriority(NotificationCompat.PRIORITY_HIGH);

Bạn có chắc không? Tài liệu cho biết "Khi được đặt, màu được đặt với setColor (int) sẽ được sử dụng làm màu nền của thông báo này." và "Đối với hầu hết các kiểu, màu sẽ chỉ được áp dụng nếu thông báo dành cho thông báo dịch vụ nền trước." Dường như không thể thay đổi màu nền trước của biểu tượng.
Dominique

Điều này chỉ dành cho thông báo nền trước và chỉ áp dụng cho mục thông báo - không phải biểu tượng thông báo.
Subaru Tashiro
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.