Aby powiadomienia wyglądały jak najlepiej w różnych wersjach Androida, użyj standardowego szablonu powiadomienia. Jeśli chcesz umieścić w powiadomieniu więcej treści, rozważ użycie jednego z rozwijanych szablonów powiadomień.
Jeśli jednak szablony systemowe nie spełniają Twoich potrzeb, możesz użyć własnego układu powiadomienia.
Tworzenie niestandardowego układu obszaru treści
Jeśli potrzebujesz niestandardowego układu, możesz zastosować
NotificationCompat.DecoratedCustomViewStyle do powiadomienia. Ten interfejs API umożliwia udostępnienie niestandardowego układu obszaru treści, który zwykle jest zajmowany przez tytuł i tekst, przy jednoczesnym korzystaniu z dekoracji systemowych w przypadku ikony powiadomienia, sygnatury czasowej, tekstu dodatkowego i przycisków poleceń.
Ten interfejs API działa podobnie do rozwijanych szablonów powiadomień, ponieważ opiera się na podstawowym układzie powiadomienia w następujący sposób:
- Utwórz podstawowe powiadomienie za pomocą
NotificationCompat.Builder. - Wywołaj metodę
setStyle(), przekazując jej instancję klasyNotificationCompat.DecoratedCustomViewStyle. - Rozwiń niestandardowy układ jako instancję klasy
RemoteViews. - Wywołaj metodę
setCustomContentView(), aby ustawić układ zwiniętego powiadomienia. - Opcjonalnie możesz też wywołać metodę
setCustomBigContentView(), aby ustawić inny układ rozwiniętego powiadomienia.
Przygotowywanie układów
Potrzebujesz układu small i large. W tym przykładzie układ small może wyglądać tak:
<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>
A układ large tak:
<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>
Tworzenie i wyświetlanie powiadomienia
Gdy układy będą gotowe, możesz ich użyć w sposób pokazany w tym przykładzie:
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)
Pamiętaj, że kolor tła powiadomienia może się różnić w zależności od urządzenia i wersji. W niestandardowym układzie zastosuj style biblioteki pomocy, takie jak
TextAppearance_Compat_Notification w przypadku tekstu i
TextAppearance_Compat_Notification_Title w przypadku tytułu,
jak pokazano w tym przykładzie. Te style dostosowują się do zmian kolorów, dzięki czemu tekst nie będzie czarny na czarnym ani biały na białym.
<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" />
Unikaj ustawiania obrazu tła w obiekcie RemoteViews, ponieważ tekst może stać się nieczytelny.
Gdy wywołasz powiadomienie, gdy użytkownik korzysta z aplikacji, efekt będzie podobny do tego na ilustracji 1:
Gdy klikniesz strzałkę rozwijania, powiadomienie się rozwinie, jak pokazano na ilustracji 2:
Gdy upłynie limit czasu powiadomienia, będzie ono widoczne tylko na pasku systemowym, który wygląda jak na ilustracji 3:
Gdy klikniesz strzałkę rozwijania, powiadomienie się rozwinie, jak pokazano na ilustracji 4:
Tworzenie w pełni niestandardowego układu powiadomienia
Jeśli nie chcesz, aby powiadomienie było ozdobione standardową ikoną i nagłówkiem, wykonaj opisane powyżej czynności, ale nie wywołuj metody setStyle().