我正在尝试创建一个包含 4 个 ImageView 的自定义通知。当我尝试添加图像时,如果只添加一张图像,它会起作用,但当我尝试添加第二张图像时,它什么也不会显示。
这是我创建通知的函数
private void createNotification() {
Intent intent = new Intent(this, RateDia.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
RemoteViews layoutNotificacio = new RemoteViews(getPackageName(), R.layout.notificacio_gran);
layoutNotificacio.setImageViewBitmap(R.id.imatge1, BitmapFactory.decodeResource(getResources(), R.drawable.e01_grinning_face));
layoutNotificacio.setImageViewBitmap(R.id.imatge2, BitmapFactory.decodeResource(getResources(), R.drawable.e02_grimacing_face));
layoutNotificacio.setImageViewBitmap(R.id.imatge3, BitmapFactory.decodeResource(getResources(), R.drawable.e03_grinning_face_with_smiling_eyes));
layoutNotificacio.setImageViewBitmap(R.id.imatge4, BitmapFactory.decodeResource(getResources(), R.drawable.e04_face_with_tears_of_joy));
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.mimismo_icono_notificacio)
.setContentTitle("Notificación de miMismo")
.setCustomBigContentView(layoutNotificacio)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.setAutoCancel(true);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
notificationManager.notify(NOTIFICATION_ID, builder.build());
}
}
这是远程视图的 xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imatge1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true"
android:maxWidth="50dp"
android:src="@drawable/e01_grinning_face" />
<ImageView
android:id="@+id/imatge2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true"
android:maxWidth="50dp"
android:src="@drawable/e02_grimacing_face" />
<ImageView
android:id="@+id/imatge3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true"
android:maxWidth="50dp"
android:src="@drawable/e04_face_with_tears_of_joy" />
<ImageView
android:id="@+id/imatge4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true"
android:maxWidth="50dp"
android:src="@android:drawable/ic_menu_add" />
</LinearLayout>
设置图像源是为了测试布局,但必须以编程方式更改,这就是问题发生的地方。
如你所见,有4行是这样的:
layoutNotificacio.setImageViewBitmap(R.id.imatge1, BitmapFactory.decodeResource(getResources(), R.drawable.e01_grinning_face));
如果我评论或删除其中三个,我会在通知中看到一张图片。如果我有 2 个或更多,则不会显示任何内容。
如有任何帮助,我们将不胜感激。
在Drawables里面
如果您的意思是
res/drawable/
,请停止使用该目录。这是 res/drawable-mdpi/
的同义词,这意味着 Android 可能会在不需要或不需要时缩放您的图像。相反,要么将图像放入 res/drawable-anydpi/
(也就是说它们不需要根据屏幕密度进行缩放),要么在适当的密度特定目录中设置图像的每个密度版本(例如,res/drawable-hdpi/
, res/drawable-xhdpi/
)。
对于您原来的问题,请尝试 使用
setImageViewResource()
而不是 setImageViewBitmap()
。这将简化您的代码并显着减少 RemoteViews
更新中使用的内存量。