Я реализовал пользовательское уведомление с помощью
https://developer.android.com/training/notify-user/custom-notification
Я использовал
.setStyle(new NotificationCompat.DecoratedCustomViewStyle())
для установки оригинальных стилей + заголовок уведомления.
Результат следующий:
Компоновка:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/notification_small"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/notification_image"
android:layout_toStartOf="@+id/notification_image">
<LinearLayout
android:id="@+id/linearNotificationWrap"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/notification_cat_icon"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center" />
<TextView
android:id="@+id/notification_title"
style="@style/TextAppearance.Compat.Notification.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="end"
android:maxLines="1"
android:text="title" />
</LinearLayout>
<TextView
android:id="@+id/notification_body"
style="@style/TextAppearance.Compat.Notification.Info"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/linearNotificationWrap"
android:ellipsize="marquee"
android:maxLines="2"
android:text="body" />
</RelativeLayout>
<ImageView
android:id="@+id/notification_image"
android:layout_width="@android:dimen/app_icon_size"
android:layout_height="@android:dimen/app_icon_size"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_gravity="center" />
</RelativeLayout>
Неважно, что я использую в android:layout_height
вид не меняется. Если я удалю DecoratedCustomViewStyle, бесполезная высота исчезнет, но я хочу установить стандартные стили уведомлений.
Код для отображения уведомления:
private void sendNotification(String title, String message, int id, String uri, String channelId) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("intentUrl",uri);
intent.setAction(Long.toString(System.currentTimeMillis()));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
RemoteViews notificationLayout = new RemoteViews(getPackageName(), R.layout.notification_small);
notificationLayout.setTextViewText(R.id.notification_title, title);
notificationLayout.setTextViewText(R.id.notification_body, message);
notificationLayout.setImageViewResource(R.id.notification_cat_icon,R.drawable.icon_push);
notificationLayout.setImageViewResource(R.id.notification_image,R.drawable.icon_push);
RemoteViews notificationLayoutExpanded = new RemoteViews(getPackageName(), R.layout.notification_large);
notificationLayoutExpanded.setTextViewText(R.id.notification_title, title);
notificationLayoutExpanded.setTextViewText(R.id.notification_body, message);
notificationLayoutExpanded.setImageViewResource(R.id.notification_cat_icon,R.drawable.icon_push);
notificationLayoutExpanded.setImageViewResource(R.id.notification_image,R.drawable.icon_push);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.icon_push)
.setAutoCancel(true)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
.setStyle(new NotificationCompat.DecoratedCustomViewStyle())
.setCustomContentView(notificationLayout)
.setCustomBigContentView(notificationLayoutExpanded);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, notificationBuilder.build());
}
Кто-нибудь имеет подобный эффект или имеет представление о том, что происходит?
Спасибо