Membuat Tata Letak Notifikasi Khusus

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:

  1. Buat notifikasi dasar dengan NotificationCompat.Builder.
  2. Panggil setStyle(), yang akan meneruskan instance NotificationCompat.DecoratedCustomViewStyle.
  3. Inflate tata letak kustom Anda sebagai instance RemoteViews.
  4. 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.