使用 RemoteViews 在自定义通知中加载多个图像

问题描述 投票:0回答:1

我正在尝试创建一个包含 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 个或更多,则不会显示任何内容。

如有任何帮助,我们将不胜感激。

java android xml android-notifications android-remoteview
1个回答
0
投票

在Drawables里面

如果您的意思是

res/drawable/
,请停止使用该目录。这是
res/drawable-mdpi/
的同义词,这意味着 Android 可能会在不需要或不需要时缩放您的图像。相反,要么将图像放入
res/drawable-anydpi/
(也就是说它们不需要根据屏幕密度进行缩放),要么在适当的密度特定目录中设置图像的每个密度版本(例如,
res/drawable-hdpi/
res/drawable-xhdpi/
)。

对于您原来的问题,请尝试 使用

setImageViewResource()
而不是
setImageViewBitmap()
。这将简化您的代码并显着减少
RemoteViews
更新中使用的内存量。

© www.soinside.com 2019 - 2024. All rights reserved.