Membuat Tata Letak Notifikasi Kustom

Untuk memastikan performa terbaik notifikasi di berbagai versi Android, Anda harus selalu menggunakan template notifikasi standar untuk membuat notifikasi Anda. Tetapi, 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 khusus.

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 khusus untuk area konten

Jika membutuhkan tata letak khusus, Anda dapat menerapkan NotificationCompat.DecoratedCustomViewStyle pada notifikasi Anda. API ini memungkinkan Anda memberi tata letak khusus untuk area konten yang biasanya ditempati oleh judul dan konten 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(), dengan meneruskan instance NotificationCompat.DecoratedMediaCustomViewStyle.
  3. Kembangkan tata letak khusus Anda sebagai instance dari RemoteViews.
  4. Panggil setCustomContentView() untuk menetapkan tata letak notifikasi yang diciutkan.

    Anda juga bisa memanggil setCustomBigContentView() untuk menyetel 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 khusus 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 setelan gambar latar pada objek RemoteViews Anda karena warna teks mungkin tidak akan dapat terbaca.

Membuat tata letak notifikasi yang sepenuhnya khusus

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(), dengan meneruskan objek RemoteViews yang sama.

Untuk kode sampel lain yang menggunakan notifikasi, lihat Sampel Notifikasi Android.