Untuk memastikan performa terbaik notifikasi di berbagai versi Android, Anda harus selalu menggunakan template notifikasi standar untuk membuat notifikasi Anda. Namun, jika template sistem tidak sesuai dengan kebutuhan, Anda bisa memberi tata letak sendiri untuk notifikasi.
Jika ingin memberi lebih banyak konten dalam notifikasi, pertimbangkan juga untuk menggunakan salah satu template notifikasi yang dapat diperluas, bukan membuat tata letak kustom.
Peringatan: Bila Anda menggunakan tata letak notifikasi khusus, berhati-hatilah dalam memastikan bahwa tata letak khusus tersebut berfungsi di berbagai orientasi dan resolusi perangkat. Walaupun berlaku di semua tata letak UI, saran ini penting khususnya untuk notifikasi karena ruang di panel samping notifikasi sangat terbatas. Tinggi yang tersedia untuk tata letak notifikasi khusus bergantung pada tampilan notifikasi. Biasanya, tata letak tampilan yang diciutkan terbatas hingga 64 dp, dan tata letak tampilan yang dapat diperluas terbatas hingga 256 dp.
Membuat tata letak kustom untuk area konten
Jika memerlukan tata letak kustom, Anda dapat menerapkan NotificationCompat.DecoratedCustomViewStyle
ke notifikasi. API ini memungkinkan Anda memberi tata letak kustom untuk area konten yang biasanya ditempati oleh judul dan isi teks, sambil tetap menggunakan dekorasi sistem untuk ikon notifikasi, stempel waktu, sub-teks, dan tombol tindakan.
API ini bekerja mirip dengan template notifikasi yang dapat diperluas dengan membuat tata letak notifikasi dasar sebagai berikut:
- Buat notifikasi dasar dengan
NotificationCompat.Builder
. - Panggil
setStyle()
, yang akan meneruskan instanceNotificationCompat.DecoratedCustomViewStyle
. - Inflate tata letak kustom Anda sebagai instance
RemoteViews
. Panggil
setCustomContentView()
untuk menetapkan tata letak notifikasi yang diciutkan.Anda juga bisa memanggil
setCustomBigContentView()
guna menetapkan tata letak yang berbeda untuk notifikasi yang diperluas.
Contoh:
Kotlin
// Get the layouts to use in the custom notification val notificationLayout = RemoteViews(packageName, R.layout.notification_small) val notificationLayoutExpanded = RemoteViews(packageName, R.layout.notification_large) // Apply the layouts to the notification val customNotification = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setStyle(NotificationCompat.DecoratedCustomViewStyle()) .setCustomContentView(notificationLayout) .setCustomBigContentView(notificationLayoutExpanded) .build()
Java
// Get the layouts to use in the custom notification RemoteViews notificationLayout = new RemoteViews(getPackageName(), R.layout.notification_small); RemoteViews notificationLayoutExpanded = new RemoteViews(getPackageName(), R.layout.notification_large); // Apply the layouts to the notification Notification customNotification = new NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setStyle(new NotificationCompat.DecoratedCustomViewStyle()) .setCustomContentView(notificationLayout) .setCustomBigContentView(notificationLayoutExpanded) .build();
Berhati-hatilah karena warna latar notifikasi dapat bervariasi di berbagai perangkat dan versi. Jadi, Anda harus selalu menerapkan gaya support library seperti TextAppearance_Compat_Notification
untuk teks dan TextAppearance_Compat_Notification_Title
untuk judul dalam tata letak kustom Anda. Gaya-gaya ini beradaptasi dengan variasi warna sehingga Anda tidak harus selalu menggunakan teks berwarna hitam di atas hitam atau putih di atas putih. Contoh:
<TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:text="@string/notification_title" android:id="@+id/notification_title" style="@style/TextAppearance.Compat.Notification.Title" />
Hindari juga menyetel gambar latar pada objek RemoteViews
Anda, karena warna teks mungkin tidak dapat terbaca.
Membuat tata letak notifikasi yang sepenuhnya kustom
Jika Anda tidak ingin notifikasi Anda berhiaskan ikon dan header notifikasi standar, ikuti langkah-langkah di atas untuk menggunakan setCustomBigContentView()
, tetapi jangan memanggil setStyle()
.
Untuk mendukung versi Android yang lebih lama dari Android 4.1 (API level 16), Anda juga harus memanggil setContent()
, yang meneruskannya objek RemoteViews
yang sama.
Untuk kode sampel lain yang menggunakan notifikasi, lihat Sampel Notifikasi Android.