ایجاد طرح‌بندی اعلان سفارشی

برای اینکه اعلان‌هایتان در نسخه‌های مختلف Android بهترین ظاهر را داشته باشند، از الگوی اعلان استاندارد برای ساختن اعلان‌هایتان استفاده کنید. اگر می‌خواهید محتوای بیشتری در اعلانتان ارائه دهید، از یکی از الگوهای اعلان ازهم بازشدنی استفاده کنید.

بااین‌حال، اگر الگوهای سیستم نیازهای شما را برآورده نمی‌کنند، می‌توانید از چیدمان خودتان برای اعلان استفاده کنید.

ایجاد چیدمان سفارشی برای ناحیه محتوا

اگر به چیدمان سفارشی نیاز دارید، می‌توانید NotificationCompat.DecoratedCustomViewStyle را روی اعلانتان اعمال کنید. این API به شما امکان می‌دهد چیدمان سفارشی برای ناحیه محتوایی که معمولاً توسط عنوان و محتوای نوشتاری اشغال می‌شود ارائه دهید، درحالی‌که همچنان از تزئینات سیستم برای نماد اعلان، مُهر زمان، زیرنوشتار، و دکمه‌های کنش استفاده می‌کنید.

این API مشابه الگوهای اعلان ازهم بازشدنی عمل می‌کند و با ساختن چیدمان اعلان پایه به این صورت کار می‌کند:

  1. ساختن اعلان پایه با NotificationCompat.Builder.
  2. setStyle() را فراخوانی کنید و نمونه‌ای از NotificationCompat.DecoratedCustomViewStyle را به آن ارسال کنید.
  3. چیدمان سفارشی‌تان را به‌عنوان نمونه‌ای از RemoteViews گسترش دهید.
  4. برای تنظیم طرح‌بندی اعلان جمع‌شده، setCustomContentView() را فراخوانی کنید.
  5. به‌صورت اختیاری، برای تنظیم چیدمان متفاوت برای اعلان ازهم بازشده، setCustomBigContentView() را نیز فراخوانی کنید.

آماده کردن چیدمان‌ها

به چیدمان small و large نیاز دارید. برای این مثال، چیدمان small ممکن است این‌گونه باشد:

<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 ممکن است به این شکل باشد:

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

ساختن و نمایش اعلان

پس‌از آماده شدن چیدمان‌ها، می‌توانید از آن‌ها به‌صورت نشان‌داده‌شده در مثال زیر استفاده کنید:

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)

توجه داشته باشید که رنگ پس‌زمینه اعلان ممکن است در دستگاه‌ها و نسخه‌های مختلف متفاوت باشد. سبک‌های «کتابخانه پشتیبانی» را مثل TextAppearance_Compat_Notification برای نوشتار و TextAppearance_Compat_Notification_Title برای عنوان در چیدمان سفارشی‌تان اعمال کنید، همان‌طور که در مثال زیر نشان داده شده است. این سبک‌ها با تغییرات رنگی تطبیق پیدا می‌کنند تا نوشتار سیاه روی سیاه یا سفید روی سفید نداشته باشید.

<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 خودداری کنید، زیرا نوشتار شما ممکن است ناخوانا شود.

وقتی اعلانی را درحالی‌که کاربر از برنامه‌ای استفاده می‌کند راه‌اندازی می‌کنید، نتیجه مشابه شکل ۱ است:

چیدمان اعلان سفارشی جمع‌شده
شکل ۱. هنگام استفاده از برنامه‌های دیگر، طرح‌بندی اعلان کوچکی ظاهر می‌شود.

با تک‌ضرب زدن روی پیکان گسترش‌دهنده، اعلان ازهم باز می‌شود، همان‌طور که در شکل ۲ نشان داده شده است:

چیدمان اعلان سفارشی ازهم بازشده
شکل ۲. هنگام استفاده از برنامه‌های دیگر، طرح‌بندی اعلان بزرگی ظاهر می‌شود.

پس‌از اتمام مهلت اعلان، اعلان فقط در نوار سیستم قابل‌مشاهده است، که شبیه شکل ۳ است:

اعلان جمع‌شده در نوار سیستم
شکل ۳. نحوه نمایش طرح‌بندی اعلان کوچک در نوار سیستم.

با تک‌ضرب زدن روی پیکان گسترش‌دهنده، اعلان ازهم باز می‌شود، همان‌طور که در شکل ۴ نشان داده شده است:

اعلان ازهم بازشده در نوار سیستم
شکل ۴. چیدمان اعلان بزرگ در نوار سیستم ظاهر می‌شود.

ایجاد طرح‌بندی اعلان کاملاً سفارشی

اگر نمی‌خواهید اعلانتان با نماد و سرایند اعلان استاندارد تزیین شود، مراحل قبلی را دنبال کنید اما setStyle() را فراخوانی نکنید.