Özel bildirim düzeni oluşturma

Bildirimlerinizin Android'in farklı sürümlerinde en iyi şekilde görünmesini sağlamak için bildirimlerinizi oluştururken standart bildirim şablonunu kullanın. Bildiriminizde daha fazla içerik sunmak istiyorsanız genişletilebilir bildirim şablonlarından birini kullanabilirsiniz.

Ancak sistem şablonları ihtiyaçlarınızı karşılamıyorsa bildirim için kendi düzeninizi kullanabilirsiniz.

İçerik alanı için özel düzen oluşturma

Özel bir düzene ihtiyacınız varsa bildiriminize NotificationCompat.DecoratedCustomViewStyle uygulayabilirsiniz. Bu API, normalde başlık ve metin içeriğinin kapladığı içerik alanı için özel bir düzen sunmanıza olanak tanır. Bu sırada bildirim simgesi, zaman damgası, alt metin ve işlem düğmeleri için sistem dekorasyonlarını kullanmaya devam edebilirsiniz.

Bu API, temel bildirim düzenini aşağıdaki şekilde oluşturarak genişletilebilir bildirim şablonlarına benzer şekilde çalışır:

  1. NotificationCompat.Builder ile temel bir bildirim oluşturun.
  2. setStyle() işlevini NotificationCompat.DecoratedCustomViewStyle örneğiyle çağırın.
  3. Özel düzeninizi RemoteViews örneği olarak genişletin.
  4. Daraltılmış bildirimin düzenini ayarlamak için setCustomContentView() yöntemini çağırın.
  5. İsteğe bağlı olarak, genişletilmiş bildirim için farklı bir düzen ayarlamak üzere setCustomBigContentView() yöntemini de çağırabilirsiniz.

Düzenleri hazırlama

small ve large düzeni gerekir. Bu örnekte small düzeni şu şekilde görünebilir:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/notification_title"
        style="@style/TextAppearance.Compat.Notification.Title"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="Small notification, showing only a title" />
</LinearLayout>

large düzeni şu şekilde görünebilir:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/notification_title"
        style="@style/TextAppearance.Compat.Notification.Title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Large notification, showing a title and a body." />

    <TextView
        android:id="@+id/notification_body"
        style="@style/TextAppearance.Compat.Notification.Line2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="This is the body. The height is manually forced to 300dp." />
</LinearLayout>

Bildirimi oluşturma ve gösterme

Düzenler hazır olduktan sonra bunları aşağıdaki örnekte gösterildiği gibi kullanabilirsiniz:

val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

// 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()

notificationManager.notify(666, customNotification)

Bildirimin arka plan renginin cihazlara ve sürümlere göre değişebileceğini unutmayın. Özel düzeninizde metin için TextAppearance_Compat_Notification, başlık için TextAppearance_Compat_Notification_Title gibi Destek Kitaplığı stillerini uygulayın. Bu işlem, aşağıdaki örnekte gösterildiği gibi yapılır. Bu stiller, renk varyasyonlarına uyum sağlar. Böylece siyah üzerine siyah veya beyaz üzerine beyaz metinler oluşmaz.

<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" />

RemoteViews nesnenize arka plan resmi ayarlamayın. Aksi takdirde metniniz okunamaz hale gelebilir.

Kullanıcı bir uygulamayı kullanırken bildirim tetiklediğinizde sonuç, Şekil 1'deki gibi olur:

Daraltılmış özel bildirim düzeni
Şekil 1. Diğer uygulamaları kullanırken küçük bir bildirim düzeni görünür.

Genişletme okuna dokunulduğunda bildirim, Şekil 2'de gösterildiği gibi genişletilir:

Genişletilmiş özel bildirim düzeni
Şekil 2. Diğer uygulamalar kullanılırken büyük bir bildirim düzeni gösteriliyor.

Bildirim zaman aşımı süresi dolduktan sonra bildirim yalnızca sistem çubuğunda görünür. Bu çubuk, Şekil 3'teki gibi görünür:

Sistem çubuğunda daraltılmış bir bildirim
3.şekil Küçük bildirim düzeninin sistem çubuğunda görünümü.

Genişletme okuna dokunulduğunda bildirim, Şekil 4'te gösterildiği gibi genişler:

Sistem çubuğunda genişletilmiş bildirim
Şekil 4. Sistem çubuğunda büyük bir bildirim düzeni görünür.

Tamamen özel bir bildirim düzeni oluşturma

Bildiriminizin standart bildirim simgesi ve başlığıyla süslenmesini istemiyorsanız önceki adımları uygulayın ancak setStyle() yöntemini çağırmayın.