Biểu tượng thanh thông báo chuyển sang màu trắng trong Android 5 Lollipop


207

Tôi có một ứng dụng hiển thị thông báo tùy chỉnh. Vấn đề là khi chạy trong Android 5, biểu tượng nhỏ trong thanh Thông báo được hiển thị màu trắng. Làm thế nào tôi có thể sửa lỗi này?


Rahul Sharma và basiam có câu trả lời tốt hơn ở đây - stackoverflow.com/questions/30795431/
mẹo

Nó xảy ra với tôi khi chạy trên Android 6 chứ không phải 5.
Jaime Montoya

Chắc chắn, điều đó xảy ra với Android 5+, tất nhiên cũng có trong Android 6 và 7. Vào thời điểm câu hỏi, Android 5 là phiên bản mới nhất và tính năng gây ra sự cố này đã được giới thiệu trong Android 5.
Alejandro Casanova

Tôi nghĩ chính xác hơn khi nói API cấp 21 (Android 5.0), API cấp 22 (Android 5.1), API cấp 23 (Android 6.0), v.v ... Thuật ngữ "Android 5" không rõ ràng vì bạn có thể nói về Android 5.0 hoặc Android 5.1 và khi tôi đã kiểm tra thông báo và cách các biểu tượng xuất hiện trong API Cấp 22 Vs. API cấp 23, tôi đã nhận ra rằng họ cư xử khác nhau.
Jaime Montoya

Câu trả lời:


269

Câu trả lời được chấp nhận là không (hoàn toàn) chính xác. Chắc chắn, nó làm cho các biểu tượng thông báo hiển thị màu, nhưng làm như vậy với nhược điểm LỚN - bằng cách đặt SDK mục tiêu thấp hơn Android Lollipop!

Nếu bạn giải quyết vấn đề biểu tượng màu trắng của mình bằng cách đặt SDK mục tiêu của bạn thành 20, như được đề xuất, ứng dụng của bạn sẽ không nhắm mục tiêu Android Lollipop, điều đó có nghĩa là bạn không thể sử dụng các tính năng dành riêng cho Lollipop.

Hãy xem http://developer.android.com/design/style/iconography.html và bạn sẽ thấy rằng phong cách màu trắng là cách thông báo được hiển thị trong Android Lollipop.

Trong Lollipop, Google cũng đề nghị bạn sử dụng màu sẽ được hiển thị phía sau biểu tượng thông báo (màu trắng) - https://developer.android.com/about/versions/android-5.0-changes.html

Vì vậy, tôi nghĩ rằng một giải pháp tốt hơn là thêm biểu tượng hình bóng vào ứng dụng và sử dụng nó nếu thiết bị đang chạy Android Lollipop.

Ví dụ:

Notification notification = new Notification.Builder(context)
            .setAutoCancel(true)
            .setContentTitle("My notification")
            .setContentText("Look, white in Lollipop, else color!")
            .setSmallIcon(getNotificationIcon())
            .build();

    return notification;

Và, trong phương thức getNotificationIcon:

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}

34
Làm thế nào để bạn tạo ra hình bóng? Tôi là nhà phát triển không có kỹ năng photoshop và làm cho nền trong suốt bằng cách sử dụng các công cụ trực tuyến vẫn dẫn đến các biểu tượng màu trắng.
Chaitanya

6
@Chaitanya Sử dụng GIMP :)
Byteroulette 11/07/2015

4
giải pháp này không trả lời câu hỏi tại sao quá trình xây dựng Android sửa đổi một PNG hoàn toàn chính xác và nén nó và loại bỏ kênh alpha.
philk


4
thay vì kiểm tra từ công cụ sửa đổi phiên bản nền tảng mã cho thư mục drawable - drawable / drawable-v21 và đặt biểu tượng thích hợp
Igor Wojda

72

Hoàn toàn đồng ý với người dùng Daniel Saidi. Trong Đặt hàng để có ColorchoNotificationIcon tôi viết câu trả lời này.

Vì vậy, bạn đã tạo biểu tượng thích Silhouettevà tạo một số phần Transparentbất cứ nơi nào bạn muốn thêm Colors. I E,

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

Bạn có thể thêm màu của bạn bằng cách sử dụng

.setColor(your_color_resource_here)

LƯU Ý: setColorchỉ có sẵn trong Lollipopvì vậy, bạn phải kiểm traOSVersion

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    Notification notification = new Notification.Builder(context)
    ...
} else {
    // Lollipop specific setColor method goes here.
    Notification notification = new Notification.Builder(context)
    ...
    notification.setColor(your_color)
    ...            
}

Bạn cũng có thể đạt được điều này bằng cách sử dụng Lollipoplàm mục tiêu SDK.

Tất cả các hướng dẫn liên quan NotificationIconđược đưa ra tại Dòng Hướng dẫn Thông báo Bảng điều khiển dành cho nhà phát triển của Google .

Kích thước biểu tượng thông báo ưa thích 24x24dp

mdpi    @ 24.00dp   = 24.00px
hdpi    @ 24.00dp   = 36.00px
xhdpi   @ 24.00dp   = 48.00px

Và cũng tham khảo liên kết này cho Kích thước biểu tượng thông báo để biết thêm.


4
đây là ý tưởng rất tốt để đặt màu nền làm thông báo.setColor (your_color_resource_here)
TejaDroid

1
Vì vậy, tôi đã thử điều này và biểu tượng thông báo có nền màu khi tôi kéo bóng thông báo xuống. Nhưng, trong khay, nó vẫn là một biểu tượng màu trắng
Rabbi tàng hình

1
giải pháp này là đúng..có một biểu tượng thông báo có mặt sau trong suốt..và hình bóng, biểu tượng không cần chỉ có màu đen .. biểu tượng có thể có màu sắc; Chỉ là android L sẽ chuyển đổi màu hiển thị thành màu trắng..và các phiên bản Android trước đó sẽ hiển thị biểu tượng như hiện tại
Lakshay

đang thêm setColor cho bên dưới kẹo mút hiển thị biểu tượng ic_launcher tốt nhưng trong 6.0 hiển thị biểu tượng hình vuông màu trắng xin hãy giúp tôi
Harsha

Tôi đã thử nghiệm setColortrên Kitkat (API 19) và IceCreamSandwich (API 15), trong cả hai trường hợp, nó đã bỏ qua màu sắc nhưng không gặp sự cố . Vì vậy, tôi có thể bỏ qua việc kiểm tra phiên bản hệ điều hành một cách an toàn không?
Maria

47

Đây là mã Android sử dụng để hiển thị các biểu tượng thông báo:

// android_frameworks_base/packages/SystemUI/src/com/android/systemui/
//   statusbar/BaseStatusBar.java

if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
    entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
} else {
    entry.icon.setColorFilter(null);
}

Vì vậy, bạn cần đặt phiên bản sdk đích thành một cái gì đó <21và các biểu tượng sẽ được tô màu. Đây là một cách giải quyết xấu xí nhưng nó làm những gì nó dự kiến ​​sẽ làm. Dù sao, tôi thực sự khuyên bạn nên tuân theo Nguyên tắc thiết kế của Google : "Biểu tượng thông báo phải hoàn toàn màu trắng."

Đây là cách bạn có thể thực hiện nó:

Nếu bạn đang sử dụng Gradle / Android Studio để xây dựng ứng dụng của mình, hãy sử dụng build.gradle:

defaultConfig {
    targetSdkVersion 20
}

Mặt khác (Eclipse, v.v.) sử dụng AndroidManifest.xml:

<uses-sdk android:minSdkVersion="..." android:targetSdkVersion="20" />

Có bất kỳ công việc xung quanh? Hoặc tôi có thể làm gì để hiển thị đúng hoặc bất kỳ biểu tượng nào khác?
Alejandro Casanova

Tôi đã chỉnh sửa câu trả lời của mình vì tôi đã tìm thấy một cách giải quyết sau khi đọc mã nguồn Android.
Byteroulette 7/215

4
Cảm ơn rất nhiều vì sự giúp đỡ của bạn, nhưng cud bạn xin cung cấp cho tôi một số "bối cảnh". Tôi cần làm điều đó ở đâu? "Nhập cảnh" là gì?
Alejandro Casanova

Mã được lấy từ AOSP chỉ để cho thấy cách tôi tìm thấy cách giải quyết :) Tôi đã thêm một lời giải thích nhỏ về cách triển khai nó.
Byteroulette 7/215

Điều này thực sự hoạt động. Bạn có đoán được tại sao Google lại làm điều này không? Đây có phải là một lỗi hoặc một tính năng?
m02ph3u5

24

Để tránh các biểu tượng Thông báo chuyển sang màu trắng, hãy sử dụng biểu tượng "Silhouette" cho chúng, nghĩa là. hình ảnh nền trắng trong suốt. Bạn có thể sử dụng Irfanview để xây dựng chúng:

  • chọn một hình ảnh, mở ra IrfanView, nhấn F12 cho các công cụ vẽ, làm sạch hình ảnh nếu cần thiết (loại bỏ các phần không mong muốn, mịn và đánh bóng)
  • Image / Decrease Color Depth đến 2 (đối với ảnh đen trắng)
  • Image / Negative (cho một màu trắng trên hình đen)
  • Image / Resize/Resample thành 144 x 144 (sử dụng Phương pháp kích thước "Thay đổi kích thước" chứ không phải "Lấy mẫu lại", nếu không, hình ảnh được tăng lên 24 bit màu trên mỗi pixel (24 BPP) một lần nữa
  • File / Save as PNG, kiểm tra Show option dialog, kiểm tra Save Transparent Color, nhấp Save, sau đó nhấp vào màu đen trong hình ảnh để đặt màu trong suốt

Android dường như chỉ sử dụng độ phân giải hình ảnh drawable-xxhdpi (144 x 144), vì vậy hãy sao chép ic_notification.pngtệp kết quả của bạn vào \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi. Sử dụng .setSmallIcon(R.drawable.ic_notification)trong mã của bạn, hoặc sử dụng getNotificationIcon()như Daniel Saidi đã đề xuất ở trên.

Bạn cũng có thể sử dụng Android Asset Studio của Roman Nurik .


Tôi đã cố gắng chuyển đổi biểu tượng của mình bằng photoshop nhưng không thành công, nhưng là một người hâm mộ irfanview tôi đã nhanh chóng thử điều này khi tôi thấy nó và nó hoạt động tuyệt vời. Cảm ơn!
Bruce

15

Một tùy chọn khác là tận dụng các thư mục có thể vẽ (mipmap) dành riêng cho phiên bản để cung cấp đồ họa khác nhau cho Lollipop trở lên.

Trong ứng dụng của tôi, các thư mục "v21" chứa các biểu tượng có văn bản trong suốt trong khi các thư mục khác chứa phiên bản không trong suốt (đối với các phiên bản Android cũ hơn Lollipop).

Hệ thống tập tin

Mà sẽ trông giống như thế này:

Studio Android

Bằng cách này, bạn không cần kiểm tra số phiên bản trong mã, ví dụ:

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.mipmap.ic_notification)
        .setContentTitle(title)
        .setContentText(message)
        .setAutoCancel(true)
        .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

Tương tự, bạn có thể tham chiếu "ic_notification" (hoặc bất cứ điều gì bạn chọn để gọi nó) trong tải trọng GCM của bạn nếu bạn sử dụng thuộc tính "icon".

https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support


3
Điều này hoạt động và trông giống như giải pháp Android nhất.
Serge Galin

Có phải bạn đang nói rằng nếu android sẽ chọn biểu tượng từ thư mục mipmap-21 nếu phiên bản là kẹo mút, và nếu ít hơn kẹo mút thì nó sẽ chọn từ drawable?
Lakshay

@Ian, cách tiếp cận thư mục tốt cho tài nguyên trên mỗi phiên bản Android, nhưng làm thế nào bạn có thể đặt setColor(không liên quan đến mã bổ sung) theo cách đó?
Daniel

Màu sắc @Daniel cũng có thể có trong các thư mục dành riêng cho phiên bản, ví dụ: "giá trị" và "giá trị-v21".
Ian

12

Theo hướng dẫn thiết kế Android, bạn phải sử dụng hình bóng cho builder.setSmallIcon(R.drawable.some_notification_icon);Nhưng nếu bạn vẫn muốn hiển thị biểu tượng đầy màu sắc dưới dạng biểu tượng thông báo thì đây là mẹo cho kẹo mút và sử dụng mã bên dưới. LargeIcon sẽ hoạt động như một biểu tượng thông báo chính và bạn cũng cần cung cấp hình bóng cho smallIcon vì nó sẽ được hiển thị ở phía dưới bên phải của smallIcon.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
     builder.setColor(context.getResources().getColor(R.color.red));
     builder.setSmallIcon(R.drawable.some_notification_icon);
     builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
}

Và tiền kẹo chỉ sử dụng .setSmallIcon(R.mipmap.ic_launcher)với người xây dựng của bạn.


11

Bây giờ android studio được cung cấp một plugin Image Asset , sẽ được tạo biểu tượng trong tất cả các thư mục drawbale cần thiết

Image Asset Studio giúp bạn tạo các loại biểu tượng khác nhau với mật độ khác nhau và hiển thị cho bạn chính xác vị trí chúng sẽ được đặt trong dự án của bạn. Nó bao gồm các công cụ để điều chỉnh biểu tượng của bạn và thêm phông nền, tất cả trong khi hiển thị kết quả trong khung xem trước, để chúng xuất hiện chính xác như bạn dự định. Những công cụ này có thể hợp lý hóa đáng kể quá trình thiết kế và nhập biểu tượng.

Bạn có thể truy cập Tài sản hình ảnh bằng cách nhấp vào mới> nhấp vào tùy chọn Tài sản hình ảnh và nó sẽ được hiển thị cửa sổ như thế này: -

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

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


8

Tôi đã phải đối mặt với cùng một vấn đề và đó là do biểu tượng thông báo ứng dụng của tôi không phẳng. Đối với kẹo mút phiên bản Android hoặc thậm chí dưới kẹo mút, biểu tượng thông báo ứng dụng của bạn phải bằng phẳng, không sử dụng biểu tượng có bóng, v.v.

Dưới đây là mã hoạt động hoàn toàn tốt trên tất cả các phiên bản Android.

private void sendNotification(String msg) {

    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent intent = new Intent(this, CheckOutActivity.class);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(getString(R.string.app_name))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg).setLights(Color.GREEN, 300, 300)
            .setVibrate(new long[] { 100, 250 })
            .setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(true);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(new Random().nextInt(), mBuilder.build());
}

Biểu tượng sai
nhập mô tả hình ảnh ở đây

Biểu tượng bên phải

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


1
Chính xác thì bạn đang khắc phục vấn đề ở đây?
IgorGanapolsky

Cách tạo biểu tượng đúng. Có thể tạo trực tuyến? công cụ nào ??
Jiks

@Jiks Vâng, đây là liên kết
Muhammad Sohaib Ayub

7

kênh alpha là dữ liệu duy nhất của hình ảnh mà Android sử dụng cho các biểu tượng thông báo:

  • alpha == 1: pixel hiển thị màu trắng
  • alpha == 0: pixel hiển thị như màu bạn đã chọn Notification.Builder#setColor(int)

Điều này được đề cập tại https://developer.android.com/about/versions/android-5.0-changes.html :

Hệ thống bỏ qua tất cả các kênh không alpha trong các biểu tượng hành động và trong biểu tượng thông báo chính. Bạn nên cho rằng các biểu tượng này sẽ chỉ ở dạng alpha.

Hầu như tất cả các drawable tích hợp dường như là hình ảnh alpha phù hợp cho việc này, vì vậy bạn có thể sử dụng một cái gì đó như:

Notification.Builder.setColor(Color.RED)
                    .setSmallIcon(android.R.drawable.star_on)

nhưng tôi vẫn đang tìm tài liệu API chính thức xác nhận điều đó.

Đã thử nghiệm trên Android 22.


Tôi đã thử nghiệm setColortrên Kitkat (API 19) và IceCreamSandwich (API 15), trong cả hai trường hợp, nó đã bỏ qua màu sắc nhưng không gặp sự cố . Vì vậy, tôi có thể bỏ qua việc kiểm tra phiên bản hệ điều hành một cách an toàn không?
Maria

@JohnLee Tôi không nghĩ rằng nó có thể sụp đổ, chỉ có thể trông xấu nếu bạn không đưa nó vào tài khoản :-)
Ciro Santilli郝海东冠状病六四事件法轮功

3

xóa android:targetSdkVersion="21"tệp kê khai. nó sẽ làm việc và từ đây không có vấn đề gì trong apk của bạn, đó chỉ là một mẹo tôi áp dụng điều này và tôi đã tìm thấy biểu tượng đầy màu sắc trong thông báo


9
Ý tưởng hoàn toàn xấu để chơi "thủ thuật" với hệ thống! Không phải là một giải pháp!
sud007

3

Thông báo là thang độ xám như được giải thích dưới đây. Chúng không phải là màu đen và trắng, bất chấp những gì người khác đã viết. Bạn có thể đã thấy các biểu tượng với nhiều sắc thái, như các thanh cường độ mạng.

Trước API 21 (Lollipop 5.0), các biểu tượng màu hoạt động. Bạn có thể buộc ứng dụng của mình nhắm mục tiêu API 20, nhưng điều đó giới hạn các tính năng có sẵn cho ứng dụng của bạn, vì vậy không nên sử dụng ứng dụng này. Bạn có thể kiểm tra mức API đang chạy và đặt biểu tượng màu hoặc biểu tượng thang độ xám một cách thích hợp, nhưng điều này có thể không đáng giá. Trong hầu hết các trường hợp, tốt nhất là đi với một biểu tượng thang độ xám.

Hình ảnh có bốn kênh, RGBA (đỏ / xanh / xanh / alpha). Đối với các biểu tượng thông báo, Android bỏ qua các kênh R, G và B. Kênh duy nhất được tính là Alpha, còn được gọi là độ mờ. Thiết kế biểu tượng của bạn với trình chỉnh sửa cho phép bạn kiểm soát giá trị Alpha của màu vẽ.

Cách các giá trị Alpha tạo ra hình ảnh thang độ xám:

  • Alpha = 0 (trong suốt) - Những pixel này trong suốt, hiển thị màu nền.
  • Alpha = 255 (mờ đục) - Những pixel này có màu trắng.
  • Alpha = 1 ... 254 - Những pixel này chính xác là những gì bạn mong đợi, cung cấp các sắc thái giữa trong suốt và trắng.

Thay đổi nó bằng setColor:

  • Gọi NotificationCompat.Builder.setColor(int argb). Từ tài liệu cho Notification.color:

    Màu nhấn (một số nguyên ARGB như các hằng số trong Màu) được áp dụng bởi các mẫu Kiểu chuẩn khi trình bày thông báo này. Thiết kế mẫu hiện tại xây dựng một hình ảnh tiêu đề đầy màu sắc bằng cách phủ lên hình ảnh biểu tượng (được tô màu trắng) trên một trường có màu này. Các thành phần Alpha bị bỏ qua.

    Thử nghiệm của tôi với setColor cho thấy các thành phần Alpha không bị bỏ qua; thay vào đó, họ vẫn cung cấp thang độ xám. Giá trị Alpha cao hơn biến một pixel trắng. Các giá trị Alpha thấp hơn biến pixel thành màu nền (màu đen trên thiết bị của tôi) trong vùng thông báo hoặc thành màu được chỉ định trong thông báo kéo xuống. (Có vẻ như những người khác đã báo cáo hành vi hơi khác nhau, vì vậy hãy lưu ý!)


2

Đăng Android Lollipop phát hành Android đã thay đổi các hướng dẫn để hiển thị các biểu tượng thông báo trong thanh Thông báo. Tài liệu chính thức có nội dung "Cập nhật hoặc xóa tài sản liên quan đến màu sắc. Hệ thống bỏ qua tất cả các kênh không phải alpha trong các biểu tượng hành động và trong biểu tượng thông báo chính. Bạn nên giả sử rằng các biểu tượng này sẽ chỉ ở dạng alpha. Hệ thống sẽ vẽ các biểu tượng thông báo màu trắng và các biểu tượng hành động trong màu xám đen. Bây giờ điều đó có nghĩa là theo thuật ngữ của người đàn ông là "Chuyển đổi tất cả các phần của hình ảnh mà bạn không muốn hiển thị thành các pixel trong suốt. Tất cả các màu và pixel không trong suốt được hiển thị màu trắng "

Bạn có thể xem cách thực hiện điều này một cách chi tiết bằng ảnh chụp màn hình tại đây https://blog.clevertap.com/fixing-notification-icon-for-android-leets-and-above/

Mong rằng sẽ giúp


2

Bạn cần nhập hình ảnh PNG trong suốt một màu. Vì vậy, bạn có thể đặt màu Biểu tượng của biểu tượng nhỏ. Nếu không, nó sẽ được hiển thị màu trắng trong một số thiết bị như MOTO


1

Nếu bạn đang sử dụng GoogleFireBaseMessaging, bạn có thể đặt "id biểu tượng" trong tải trọng "thông báo" (nó giúp tôi giải quyết vấn đề về biểu tượng thanh trắng):

{
    "to":"<fb_id>",
    "priority" : "high",
    "notification" : 
    {
        "title" : "title",
        "body" : "body" ,
        "sound" : "default",
        "icon" : "ic_notification"
    }
}

đặt ic_notification thành id của riêng bạn từ R.drawable.


Bạn đã đặt biểu tượng đó ở đâu? Tất cả những gì tôi nhận được là biểu tượng của ứng dụng của tôi và tất cả các tệp R.drawable tôi tìm thấy là các tệp lớp nhị phân.
shinzou

@kuhaku anh ấy đang đề cập đến một tệp ic_launcher.png trong thư mục 'drawable'.
Johnson

0

Tôi cũng phải đối mặt với quá nhiều vấn đề trong vấn đề này nhưng sau khi tìm kiếm trên internet tôi đã tìm thấy các giải pháp khác nhau cho vấn đề này. Hãy cho tôi tổng hợp tất cả các giải pháp và giải thích:

Lưu ý: Giải pháp này dành cho người dùng Phonegap cordova

  1. Thí dụ

<preference name="android-targetSdkVersion" value="20"/>

Bạn cần đặt giá trị android-targetSdkVersion của mình dưới 21. Vì vậy, sau khi đặt giá trị này, hình ảnh biểu tượng Thông báo sẽ xuất hiện cho đến Android 6 (Marshmallow), Nó sẽ không hoạt động trong Android 7 (Nougat). Giải pháp này đã làm việc cho tôi.

  1. Thay đổi thanh trạng tháiStyle trong tệp cấu hình của bạn. Thí dụ

<preference name="StatusBarStyle" value="lightcontent" />

Nhưng giải pháp này sẽ chỉ hoạt động khi ứng dụng của bạn được mở. Vì vậy, tôi đoán giải pháp này không phải là giải pháp tốt nhất nhưng nó hiệu quả với nhiều người dùng.

  1. Làm cho biểu tượng của bạn trong suốt. Giải pháp này đã làm việc cho nhiều người. Trên thực tế, vấn đề là, trong quá trình phát triển ứng dụng gốc, chúng tôi cần cung cấp cho họ ba hình ảnh: (a) Biểu tượng ứng dụng (b) Biểu tượng thông báo (c) Hình ảnh biểu tượng thanh trạng thái, nhưng trong trường hợp phát triển ứng dụng di động lai, không có tùy chọn nào để làm như vậy. Vì vậy, làm cho biểu tượng của bạn minh bạch và giải pháp này sẽ giải quyết vấn đề của bạn.

Và tôi chắc chắn một trong những giải pháp trên sẽ có tác dụng cho vấn đề của bạn.


0

FYI: Nếu Biểu tượng không xuất hiện, hãy đảm bảo cấu hình thông báo cục bộ hoặc từ xa của bạn chứa tên biểu tượng chính xác tức là

'largeIcon' => 'ic_launcher',
'smallIcon' => 'ic_launcher' // defaults to ic_launcher, 

0

Tôi nghĩ đã quá muộn để nói về API 21, nhưng tôi đã tìm thấy một cách dễ dàng.

Khi sử dụng 'Thông báo tùy chỉnh (bố cục tùy chỉnh)' s,

RemoteView của

setImageViewResource(int viewId, int srcId);

setImageViewUri(int viewId, Uri uri); 

làm cho những hình ảnh đó trở nên trắng trên Lollipop (API 21).

Nhưng khi sử dụng

setImageViewBitmap(int viewId, Bitmap bitmap);

Hình ảnh không trở thành mặt nạ trắng!



-3

trộn hai thứ này trong lớp ứng dụng

 defaultConfig {
    applicationId "com.example.abdulwahidvi.notificationproblem"
    minSdkVersion 16
    //This is the version that was added by project by default
    targetSdkVersion 26 <------ default
    // Changed it to version 20
    targetSdkVersion 20 <------ mine

    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

-38

android:targetSdkVersion="20"nó nên là < 21.


1
Vui lòng không làm theo giải pháp này, chắc chắn rằng nó có thể hoạt động nhưng với chi phí chạy ứng dụng của bạn ở chế độ tương thích cho các phiên bản Android mới hơn.
king_below_my_lord
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.