برای اینکه اعلانهایتان در نسخههای مختلف Android بهترین ظاهر را داشته باشند، از الگوی اعلان استاندارد برای ساختن اعلانهایتان استفاده کنید. اگر میخواهید محتوای بیشتری در اعلانتان ارائه دهید، از یکی از الگوهای اعلان ازهم بازشدنی استفاده کنید.
بااینحال، اگر الگوهای سیستم نیازهای شما را برآورده نمیکنند، میتوانید از چیدمان خودتان برای اعلان استفاده کنید.
ایجاد چیدمان سفارشی برای ناحیه محتوا
اگر به چیدمان سفارشی نیاز دارید، میتوانید
NotificationCompat.DecoratedCustomViewStyle را روی اعلانتان اعمال کنید. این
API به شما امکان میدهد چیدمان سفارشی برای ناحیه محتوایی که معمولاً توسط
عنوان و محتوای نوشتاری اشغال میشود ارائه دهید، درحالیکه همچنان از تزئینات سیستم برای
نماد اعلان، مُهر زمان، زیرنوشتار، و دکمههای کنش استفاده میکنید.
این API مشابه الگوهای اعلان ازهم بازشدنی عمل میکند و با ساختن چیدمان اعلان پایه به این صورت کار میکند:
- ساختن اعلان پایه با
NotificationCompat.Builder. setStyle()را فراخوانی کنید و نمونهای ازNotificationCompat.DecoratedCustomViewStyleرا به آن ارسال کنید.- چیدمان سفارشیتان را بهعنوان نمونهای از
RemoteViewsگسترش دهید. - برای تنظیم طرحبندی اعلان جمعشده،
setCustomContentView()را فراخوانی کنید. - بهصورت اختیاری، برای تنظیم چیدمان متفاوت برای اعلان ازهم بازشده،
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() را فراخوانی نکنید.