Saya memiliki aplikasi yang menampilkan pemberitahuan khusus. Masalahnya adalah bahwa ketika berjalan di Android 5 ikon kecil di bilah Pemberitahuan ditampilkan dalam warna putih. Bagaimana saya bisa memperbaikinya?
android
android-notifications
android-5.0-lollipop
Alejandro Casanova
sumber
sumber
Jawaban:
Jawaban yang diterima tidak (sepenuhnya) benar. Tentu, itu membuat ikon pemberitahuan tampil berwarna, tetapi melakukannya dengan kelemahan BESAR - dengan mengatur target SDK lebih rendah dari Android Lollipop!
Jika Anda memecahkan masalah ikon putih Anda dengan menetapkan target SDK Anda menjadi 20, seperti yang disarankan, aplikasi Anda tidak akan menargetkan Android Lollipop, yang berarti Anda tidak dapat menggunakan fitur khusus Lollipop.
Lihatlah http://developer.android.com/design/style/iconography.html , dan Anda akan melihat bahwa gaya putih adalah cara pemberitahuan ditampilkan di Android Lollipop.
Di Lollipop, Google juga menyarankan agar Anda menggunakan warna yang akan ditampilkan di belakang ikon pemberitahuan (putih) - https://developer.android.com/about/versions/android-5.0-changes.html
Jadi, saya pikir solusi yang lebih baik adalah menambahkan ikon siluet ke aplikasi dan menggunakannya jika perangkat menjalankan Android Lollipop.
Misalnya:
Dan, dalam metode getNotificationIcon:
sumber
ctrl+f
dan mengetiknotification
di halaman itu ia tidak dapat menemukan apa pun ...Sepenuhnya setuju dengan pengguna Daniel Saidi. Agar memiliki
Color
untukNotificationIcon
saya menulis jawaban ini.Untuk itu, Anda harus membuat ikon seperti
Silhouette
dan membuat beberapa bagian diTransparent
mana pun Anda ingin menambahkanColors
. yaitu,Anda dapat menambahkan warna menggunakan
.setColor(your_color_resource_here)
CATATAN:
setColor
hanya tersedia diLollipop
jadi, Anda harus memeriksaOSVersion
Anda juga dapat mencapai ini dengan menggunakan
Lollipop
sebagai targetSDK
.Semua instruksi yang
NotificationIcon
diberikan pada Baris Panduan Pemberitahuan Konsol Google Developer .Ikon Notifikasi Pilihan Ukuran 24x24dp
Dan juga lihat tautan ini untuk Ukuran Ikon Pemberitahuan untuk info lebih lanjut.
sumber
setColor
pada Kitkat (API 19) dan IceCreamSandwich (API 15), dalam kedua kasus itu mengabaikan warna tetapi tidak crash . Jadi bisakah saya dengan aman menghilangkan memeriksa versi OS?Ini adalah kode yang digunakan Android untuk menampilkan ikon pemberitahuan:
Jadi, Anda perlu mengatur versi target SDK untuk sesuatu
<21
dan ikon akan tetap berwarna. Ini adalah solusi buruk tetapi melakukan apa yang diharapkan untuk dilakukan. Lagi pula, saya benar-benar menyarankan mengikuti Panduan Desain Google : "Ikon pemberitahuan harus sepenuhnya putih."Inilah cara Anda dapat mengimplementasikannya:
Jika Anda menggunakan Gradle / Android Studio untuk membangun aplikasi Anda, gunakan
build.gradle
:Jika tidak (Eclipse dll) gunakan
AndroidManifest.xml
:sumber
Untuk menghindari ikon Notifikasi menjadi putih, gunakan ikon "Silhouette" untuk mereka, yaitu. gambar latar belakang putih-transparan. Anda dapat menggunakan Irfanview untuk membangunnya:
IrfanView
, tekan F12 untuk alat melukis, bersihkan gambar jika perlu (hapus bagian yang tidak diinginkan, halus dan poles)Image / Decrease Color Depth
ke 2 (untuk gambar hitam putih)Image / Negative
(untuk putih pada gambar hitam)Image / Resize/Resample
hingga 144 x 144 (gunakan Metode Ukuran "Ubah Ukuran" bukan "Ubah Contoh", jika tidak gambar akan meningkat menjadi 24 bit warna per piksel (24 BPP) lagiFile / Save as PNG
, periksaShow option dialog
, periksaSave Transparent Color
, klikSave
, lalu klik pada warna hitam pada gambar untuk mengatur warna transparanAndroid tampaknya hanya menggunakan resolusi gambar drawable-xxhdpi (144 x 144), jadi salin
ic_notification.png
file yang dihasilkan ke\AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi
. Gunakan.setSmallIcon(R.drawable.ic_notification)
dalam kode Anda, atau gunakangetNotificationIcon()
seperti yang disarankan Daniel Saidi di atas.Anda juga dapat menggunakan Android Asset Studio Roman Nurik .
sumber
Pilihan lain adalah mengambil keuntungan dari direktori drawable (mipmap) versi-spesifik untuk memasok grafik yang berbeda untuk Lollipop dan yang lebih tinggi.
Di aplikasi saya, direktori "v21" berisi ikon dengan teks transparan sementara direktori lain berisi versi tidak transparan (untuk versi Android yang lebih tua dari Lollipop).
Yang seharusnya terlihat seperti ini:
Dengan cara ini, Anda tidak perlu memeriksa nomor versi dalam kode, mis
Demikian juga, Anda dapat referensi "ic_notification" (atau apa pun yang Anda pilih untuk menyebutnya) dalam muatan GCM Anda jika Anda menggunakan atribut "ikon".
https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support
sumber
setColor
(tanpa melibatkan kode tambahan) dengan cara itu?Menurut pedoman desain Android Anda harus menggunakan siluet untuk
builder.setSmallIcon(R.drawable.some_notification_icon);
Tetapi jika Anda masih ingin menunjukkan ikon berwarna-warni sebagai ikon pemberitahuan di sini adalah trik untuk lollipop dan penggunaan di atas di bawah kode. LargeIcon akan bertindak sebagai ikon pemberitahuan utama dan Anda juga harus memberikan siluet untuk smallIcon karena akan ditampilkan di kanan bawah largeIcon.Dan pra-lolipop hanya digunakan
.setSmallIcon(R.mipmap.ic_launcher)
dengan pembangun Anda.sumber
Sekarang android studio menyediakan plugin Image Asset , yang akan menghasilkan ikon di semua folder drawbale yang diperlukan
Image Asset Studio membantu Anda membuat berbagai jenis ikon dengan kepadatan berbeda dan menunjukkan dengan tepat di mana mereka akan ditempatkan di proyek Anda. Ini termasuk alat untuk menyesuaikan ikon Anda dan menambahkan latar belakang, semua saat menampilkan hasilnya di panel pratinjau, sehingga mereka muncul persis seperti yang Anda inginkan. Alat-alat ini secara dramatis dapat merampingkan desain ikon dan proses impor.
Anda dapat mengakses Aset Gambar dengan mengklik baru> klik pada opsi Aset Gambar dan akan muncul jendela seperti ini: -
sumber
Saya menghadapi masalah yang sama dan itu karena ikon notifikasi aplikasi saya tidak datar. Untuk versi Android lollipop atau bahkan di bawah lollipop ikon pemberitahuan aplikasi Anda harus rata, jangan gunakan ikon dengan bayangan dll.
Di bawah ini adalah kode yang bekerja dengan sangat baik di semua versi Android
Ikon yang salah
Ikon Kanan
sumber
alpha-channel adalah satu-satunya data gambar yang digunakan Android untuk ikon pemberitahuan:
alpha == 1
: piksel menunjukkan warna putihalpha == 0
: piksel ditampilkan sebagai warna yang Anda pilihNotification.Builder#setColor(int)
Ini disebutkan di https://developer.android.com/about/versions/android-5.0-changes.html :
Hampir semua drawable bawaan sepertinya gambar alpha yang cocok untuk ini, jadi Anda bisa menggunakan sesuatu seperti:
tapi saya masih mencari doc API yang secara resmi mengkonfirmasi itu.
Diuji pada Android 22.
sumber
setColor
pada Kitkat (API 19) dan IceCreamSandwich (API 15), dalam kedua kasus itu mengabaikan warna tetapi tidak crash . Jadi bisakah saya dengan aman menghilangkan memeriksa versi OS?hapus
android:targetSdkVersion="21"
dari manifest.xml. itu akan bekerja! dan dari ini tidak ada masalah sama sekali di apk Anda itu hanya trik saya menerapkan ini dan saya menemukan ikon berwarna-warni di pemberitahuansumber
Pemberitahuan berwarna abu - abu seperti yang dijelaskan di bawah ini. Mereka tidak hitam-putih, terlepas dari apa yang ditulis orang lain. Anda mungkin telah melihat ikon dengan banyak corak, seperti bilah kekuatan jaringan.
Sebelum API 21 (Lollipop 5.0), ikon warna berfungsi. Anda dapat memaksa aplikasi Anda untuk menargetkan API 20, tetapi itu membatasi fitur yang tersedia untuk aplikasi Anda, jadi itu tidak dianjurkan. Anda dapat menguji level API yang sedang berjalan dan mengatur ikon warna atau ikon skala abu-abu dengan tepat, tetapi ini mungkin tidak bermanfaat. Dalam kebanyakan kasus, yang terbaik adalah menggunakan ikon skala abu-abu.
Gambar memiliki empat saluran, RGBA (merah / hijau / biru / alfa). Untuk ikon notifikasi, Android mengabaikan saluran R, G, dan B. Satu-satunya saluran yang diperhitungkan adalah Alpha, juga dikenal sebagai opacity. Desain ikon Anda dengan editor yang memberi Anda kendali atas nilai Alpha warna gambar Anda.
Bagaimana nilai-nilai Alpha menghasilkan gambar skala abu-abu:
Mengubahnya dengan
setColor
:Panggil
NotificationCompat.Builder.setColor(int argb)
. Dari dokumentasi untukNotification.color
:Pengujian saya dengan setColor menunjukkan bahwa komponen Alpha tidak diabaikan; sebagai gantinya, mereka masih menyediakan skala abu-abu. Nilai Alpha yang lebih tinggi menjadikan piksel putih. Nilai Alpha yang lebih rendah mengubah piksel ke warna latar belakang (hitam di perangkat saya) di area notifikasi, atau ke warna yang ditentukan dalam notifikasi pull-down. (Tampaknya orang lain melaporkan perilaku yang sedikit berbeda, jadi waspadalah!)
sumber
Pasca rilis Android Lollipop android telah mengubah pedoman untuk menampilkan ikon pemberitahuan di bilah Pemberitahuan. Dokumentasi resmi mengatakan "Perbarui atau hapus aset yang melibatkan warna. Sistem mengabaikan semua saluran non-alfa dalam ikon tindakan dan ikon pemberitahuan utama. Anda harus mengasumsikan bahwa ikon ini hanya akan alfa. Sistem menggambar ikon pemberitahuan dengan warna putih dan ikon tindakan dalam abu-abu gelap. " Sekarang apa artinya dalam istilah orang awam adalah "Konversi semua bagian gambar yang Anda tidak ingin tampilkan ke piksel transparan. Semua warna dan piksel yang tidak transparan ditampilkan dalam warna putih "
Anda dapat melihat bagaimana melakukan ini secara terperinci dengan tangkapan layar di sini https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/
Semoga itu bisa membantu
sumber
Anda Perlu mengimpor gambar PNG transparan satu warna. Jadi, Anda dapat mengatur warna Ikon dari ikon kecil. Kalau tidak, itu akan ditampilkan putih di beberapa perangkat seperti MOTO
sumber
Jika Anda menggunakan GoogleFireBaseMessaging, Anda dapat mengatur "ikon id" di payload "pemberitahuan" (ini membantu saya untuk menyelesaikan masalah ikon bar putih):
set ic_notification ke id Anda sendiri dari R.drawable.
sumber
Saya juga menghadapi terlalu banyak masalah dalam hal ini tetapi setelah mencari di internet saya menemukan solusi yang berbeda untuk masalah ini. Izinkan saya meringkas semua solusi dan menjelaskan:
Catatan: Solusi ini untuk pengguna cordova Phonegap
<preference name="android-targetSdkVersion" value="20"/>
Anda perlu mengatur nilai android-targetSdkVersion Anda menjadi kurang dari 21. Jadi setelah mengatur nilai ini, ikon Gambar pemberitahuan akan muncul hingga Android 6 (Marshmallow), Ini tidak akan berfungsi di Android 7 (Nougat). Solusi ini berhasil untuk saya.
<preference name="StatusBarStyle" value="lightcontent" />
Tetapi solusi ini hanya akan berfungsi ketika aplikasi Anda dibuka. Jadi, saya kira solusi ini bukan solusi terbaik tetapi berhasil bagi banyak pengguna.
Dan saya yakin salah satu solusi di atas akan bekerja untuk masalah Anda.
sumber
FYI: Jika Ikon tidak muncul, pastikan konfigurasi pemberitahuan lokal atau jarak jauh Anda mengandung nama ikon yang benar
sumber
Saya pikir sudah terlambat untuk berbicara tentang API 21, tetapi saya menemukan cara yang mudah.
Saat menggunakan 'Pemberitahuan Kustom (tata letak khusus),
RemoteView
dan
menjadikan gambar itu putih di Lollipop (API 21).
Tetapi saat menggunakan
Gambar tidak menjadi topeng putih!
sumber
Menurut dokumentasi, ikon pemberitahuan harus putih sejak Android 3.0 (API Level 11) :
https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar
sumber
mencampur dua hal ini dalam aplikasi gradle
sumber
android:targetSdkVersion="20"
seharusnya <21
.sumber