Damit Ihre Benachrichtigungen auf verschiedenen Android-Versionen optimal aussehen, verwenden Sie die Standardvorlage für Benachrichtigungen. Wenn Sie mehr Inhalte in Ihre Benachrichtigung einfügen möchten, können Sie eine der erweiterbaren Vorlagen für Benachrichtigungen verwenden.
Wenn die Systemvorlagen jedoch nicht Ihren Anforderungen entsprechen, können Sie Ihr eigenes Layout für die Benachrichtigung verwenden.
Benutzerdefiniertes Layout für den Inhaltsbereich erstellen
Wenn Sie ein benutzerdefiniertes Layout benötigen, können Sie
NotificationCompat.DecoratedCustomViewStyle auf Ihre Benachrichtigung anwenden. Mit dieser API können Sie ein benutzerdefiniertes Layout für den Inhaltsbereich bereitstellen, der normalerweise den Titel und den Textinhalt enthält. Dabei werden weiterhin Systemdekorationen für das Benachrichtigungssymbol, den Zeitstempel, den Untertitel und die Aktionsschaltflächen verwendet.
Diese API funktioniert ähnlich wie die erweiterbaren Vorlagen für Benachrichtigungen, indem sie auf dem grundlegenden Layout für Benachrichtigungen basiert:
- Erstellen Sie eine einfache Benachrichtigung mit
NotificationCompat.Builder. - Rufen Sie
setStyle()auf und übergeben Sie eine Instanz vonNotificationCompat.DecoratedCustomViewStyle. - Erstellen Sie Ihr benutzerdefiniertes Layout als Instanz von
RemoteViews. - Rufen Sie
setCustomContentView()auf, um das Layout für die minimierte Benachrichtigung festzulegen. - Optional können Sie auch
setCustomBigContentView()aufrufen, um ein anderes Layout für die erweiterte Benachrichtigung festzulegen.
Layouts vorbereiten
Sie benötigen ein small- und ein large-Layout. In diesem Beispiel könnte das small-Layout so aussehen:
<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>
Und das large-Layout so:
<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>
Benachrichtigung erstellen und anzeigen
Nachdem die Layouts fertig sind, können Sie sie wie im folgenden Beispiel verwenden:
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)
Die Hintergrundfarbe für die Benachrichtigung kann je nach Gerät und Version variieren. Wenden Sie in Ihrem benutzerdefinierten Layout Stile der Support Library wie
TextAppearance_Compat_Notification für den Text und
TextAppearance_Compat_Notification_Title für den Titel an,
wie im folgenden Beispiel gezeigt. Diese Stile passen sich an die Farbvariationen an, sodass Sie keinen schwarzen Text auf schwarzem Hintergrund oder weißen Text auf weißem Hintergrund erhalten.
<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" />
Legen Sie kein Hintergrundbild für Ihr RemoteViews-Objekt fest, da der Text sonst möglicherweise nicht lesbar ist.
Wenn Sie eine Benachrichtigung auslösen, während der Nutzer eine App verwendet, sieht das Ergebnis ähnlich wie in Abbildung 1 aus:
Wenn Sie auf den Pfeil zum Erweitern tippen, wird die Benachrichtigung erweitert, wie in Abbildung 2 gezeigt:
Nach Ablauf des Benachrichtigungs-Timeouts ist die Benachrichtigung nur noch in der Systemleiste sichtbar, wie in Abbildung 3 dargestellt:
Wenn Sie auf den Pfeil zum Erweitern tippen, wird die Benachrichtigung erweitert, wie in Abbildung 4 gezeigt:
Vollständig benutzerdefiniertes Layout für Benachrichtigungen erstellen
Wenn Sie nicht möchten, dass Ihre Benachrichtigung mit dem Standardsymbol
und der Standardüberschrift für Benachrichtigungen versehen wird, folgen Sie der Anleitung oben, rufen Sie aber nicht setStyle() auf.