Benutzerdefiniertes Benachrichtigungslayout erstellen

Damit deine Benachrichtigungen auf verschiedenen Android-Versionen optimal dargestellt werden, Verwenden Sie die Standardbenachrichtigung Vorlage für die Erstellung Ihrer Benachrichtigungen. Wenn Sie mehr Inhalte in Ihrer Benachrichtigung angeben möchten, Verwenden Sie eine der Expandable-Benachrichtigungen Vorlagen.

Sollten die Systemvorlagen nicht Ihren Anforderungen entsprechen, können Sie auch eigene Vorlagen verwenden. für die Benachrichtigung.

Benutzerdefiniertes Layout für den Inhaltsbereich erstellen

Wenn Sie ein benutzerdefiniertes Layout benötigen, NotificationCompat.DecoratedCustomViewStyle zu Ihrer Benachrichtigung. Mit dieser API können Sie ein benutzerdefiniertes Layout für den Inhalt bereitstellen. in der Regel der Titel und der Textinhalt eingenommen werden, Dekorationen für das Benachrichtigungssymbol, den Zeitstempel, den Subtext und die Aktionsschaltflächen.

Diese API funktioniert ähnlich wie die Vorlagen für erweiterbare Benachrichtigungen und baut auf der grundlegenden Benachrichtigung auf. folgendes Layout:

  1. Allgemeine Benachrichtigung erstellen mit NotificationCompat.Builder
  2. Anruf setStyle(), übergeben Sie eine Instanz NotificationCompat.DecoratedCustomViewStyle
  3. Ihr benutzerdefiniertes Layout als Instanz von RemoteViews
  4. Anruf setCustomContentView() um das Layout für die minimierte Benachrichtigung festzulegen.
  5. Rufen Sie optional setCustomBigContentView() um ein anderes Layout für die maximierte Benachrichtigung festzulegen.

Layouts vorbereiten

Du benötigst ein small- und ein large-Layout. In diesem Beispiel hat das Layout small könnte wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?>
<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 könnte so aussehen:

<?xml version="1.0" encoding="utf-8"?>
<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>

Erstellen und Benachrichtigung anzeigen

Sobald die Layouts bereit sind, können Sie sie wie im folgenden Beispiel verwenden:

Kotlin

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)

Java

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

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

notificationManager.notify(666, customNotification);

Beachten Sie, dass die Hintergrundfarbe der Benachrichtigung je nach Gerät variieren kann. und Versionen. Wenden Sie Stile der Supportbibliothek an, TextAppearance_Compat_Notification für den Text und TextAppearance_Compat_Notification_Title für den Titel in Ihrem benutzerdefinierten Layout, wie im folgenden Beispiel gezeigt. Diese Stile passen sich an die Farbvariationen an, ohne Schwarz-auf-Schwarz- oder Weiß-auf-Weiß-Text.

<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 Ihr Text unlesbar werden.

Wenn Sie eine Benachrichtigung auslösen, während der Nutzer eine App verwendet, lautet das Ergebnis: ähnlich wie in Abbildung 1:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das eine minimierte Benachrichtigung zeigt <ph type="x-smartling-placeholder">
</ph> Abbildung 1: Ein kleines Benachrichtigungslayout wird angezeigt. während du andere Apps nutzt.

Durch Tippen auf den Erweiterungspfeil wird die Benachrichtigung maximiert, wie in Abbildung 2 dargestellt:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das eine maximierte Benachrichtigung in der Systemleiste zeigt <ph type="x-smartling-placeholder">
</ph> Abbildung 2: Ein großes Benachrichtigungslayout wird angezeigt. während du andere Apps nutzt.

Nach Ablauf des Zeitlimits für Benachrichtigungen wird die Benachrichtigung nur noch im Systemleiste, die wie Abbildung 3 aussieht:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das eine minimierte Benachrichtigung in der Systemleiste zeigt <ph type="x-smartling-placeholder">
</ph> Abbildung 3: Wie das kleine Benachrichtigungslayout in der Systemleiste angezeigt.

Durch Tippen auf den Erweiterungspfeil wird die Benachrichtigung maximiert, wie in Abbildung 4 dargestellt:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das eine maximierte Benachrichtigung in der Systemleiste zeigt <ph type="x-smartling-placeholder">
</ph> Abbildung 4: Ein großes Benachrichtigungslayout wird Systemleiste.

Vollständig benutzerdefiniertes Benachrichtigungslayout erstellen

Wenn Sie nicht möchten, dass die Standardbenachrichtigung befolgen Sie die vorherigen Schritte, aber rufen Sie setStyle() nicht auf.