如何在Android 12中配置Toast图标?

49

从Android 12开始,Google会显示带有应用程序图标的toast消息。

我的应用程序有启动器图标。 Android 12启动画面正确显示应用程序图标。

通过代码显示toast

Toast.makeText(this, "Show simple toast", Toast.LENGTH_LONG).show()

compileSdkVersion/targetSdkVersion 31

Android模拟器使用Google Play Intel x86 Atom_64系统镜像API Level 31,版本8。

如何更改默认的toast图标?

输入图像描述


2
你找到答案了吗?我找不到任何关于这个的文档,而你的问题是谷歌上的第一个结果。 - Mickaël
1
我认为你使用“Snackbar”会更加顺利。 - cutiko
2
android:icon="@drawable/ic_launcher" 中引用了烤面包图标吗?ic_launcher 文件是 mipmap-XXXX 中的 png 文件。它们使用哪个 dpi 文件夹?或者它们使用 mipmap-anydpi-v26/ic_launcher.xml 文件? - Saftpresse99
7个回答

42

对我来说,简单的重启设备就解决了问题。

在更新到Android 12后,我没有重新启动我的测试手机。我遇到了一个奇怪的bug,即我的应用程序发出的Toast中显示了通用的应用图标。我尝试按照Mickaël的回答更改Manifest文件,但没有成功。最终,我恢复了应用程序调试之前使用的完全相同的Manifest文件......然后我重新启动了设备。现在我的应用可靠地在Toast中显示正确的图标。发生了什么?不确定。我怀疑重启可能会触发一个图标缓存刷新,遍历所有已安装的应用程序以搜索新的/更新的应用程序图标。


5
我也通过重新启动解决了。看起来像是系统问题? - speller
2
只有重启帮助了我在小米手机上,我甚至删除了应用程序并重新安装它也没有帮助。 - Chagai Friedlander
2
重启是我唯一解决Pixel 6问题的方法...... >.< - Reid Mac
我重新启动我的手机(Pixel 3a XL)后,它正常工作了。这是“Restart dafa”@Goolge。 - Jere Chen
确认重新启动手机确实有效! - eos1d3

12

应该会在即将到来的Android更新中解决,正如1/5/22在那个帖子中发布的:“该问题已经得到修复,并将在未来的版本中提供。” - mike47

2

1
运行了几个测试后,我发现使用通过Image Asset > Notification Icons生成的可绘制对象设置<application android:icon="@drawable/ic_stat_name" ...会覆盖默认的toast图标。
然而,使用通过Image Asset > Launcher Icons生成的可绘制对象则不起作用。所以我猜测Android Studio的生成工具中缺少某些内容。

1
public void CustomToast(Context context,String text,int ico,int duration)
{
    //define new Toast Object
    Toast toast = new Toast(context.getApplicationContext());
    //create TextView Object to set icon for it
    TextView tv_toast=new TextView(context);
    //get text from parameter for toast
    tv_toast.setText(text);
    //set background color and radius for my toast
    GradientDrawable gd = new GradientDrawable();
    gd.setColor(Color.GRAY);
    gd.setCornerRadius(20);
    gd.setStroke(1, 0xFF000000);
    //applying setting to tv
    tv_toast.setBackground(gd);
    //set icon
    tv_toast.setCompoundDrawablesWithIntrinsicBounds(ico, 0, 0, 0);
    //set duration
    toast.setDuration(duration);
    //ending- set my custom style for toast object
    toast.setView(tv_toast);
    // then show it
    toast.show();
}

0
在弹出消息中显示的图标是应用程序的图标。要更改它,您需要更改应用程序的图标。没有记录的方法可以只显示文本而不显示图标。

0
更新:第二天就停止工作了 :(
很有可能这是一个Android 12的bug,因为重新启动后一切正常。但是一旦你改变构建变体(例如从调试到发布),一切都停止工作。
在logcat中,我收到以下错误消息(尽管我只尝试显示一个Toast,我特意进行了双重检查):
2023-10-23 16:12:26.166  3055-3055  ndroid.systemu          com.android.systemui                 E  Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.167  3055-3055  ndroid.systemu          com.android.systemui                 E  Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.168  3055-3055  ResourcesManager        com.android.systemui                 E  failed to add asset path '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk'
                                                                                                    java.io.IOException: Failed to load asset path /data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk
                                                                                                        at android.content.res.ApkAssets.nativeLoad(Native Method)
                                                                                                        at android.content.res.ApkAssets.<init>(ApkAssets.java:295)
                                                                                                        at android.content.res.ApkAssets.loadFromPath(ApkAssets.java:144)
                                                                                                        at android.app.ResourcesManager.loadApkAssets(ResourcesManager.java:472)
                                                                                                        at android.app.ResourcesManager.access$000(ResourcesManager.java:84)
                                                                                                        at android.app.ResourcesManager$ApkAssetsSupplier.load(ResourcesManager.java:186)
                                                                                                        at android.app.ResourcesManager.createAssetManager(ResourcesManager.java:559)
                                                                                                        at android.app.ResourcesManager.createResourcesImpl(ResourcesManager.java:641)
                                                                                                        at android.app.ResourcesManager.findOrCreateResourcesImplForKeyLocked(ResourcesManager.java:696)
                                                                                                        at android.app.ResourcesManager.createResources(ResourcesManager.java:1049)
                                                                                                        at android.app.ResourcesManager.getResources(ResourcesManager.java:1152)
                                                                                                        at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:2453)
                                                                                                        at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1798)
                                                                                                        at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1784)
                                                                                                        at android.app.ApplicationPackageManager.getDrawable(ApplicationPackageManager.java:1545)
                                                                                                        at miui.content.res.IconCustomizer.getCustomizedNormalIcon(IconCustomizer.java:804)
                                                                                                        at miui.content.res.IconCustomizer.getIcon(IconCustomizer.java:780)
                                                                                                        at android.app.MiuiThemeHelper.getDrawable(MiuiThemeHelper.java:101)
                                                                                                        at android.content.res.IMiuiThemeHelperImpl.getDrawable(IMiuiThemeHelperImpl.java:39)
                                                                                                        at android.content.res.ThemeManagerStub.getDrawable(ThemeManagerStub.java:159)
                                                                                                        at android.app.ApplicationPackageManager.loadUnbadgedItemIcon(ApplicationPackageManager.java:3073)
                                                                                                        at android.content.pm.PackageItemInfo.loadUnbadgedIcon(PackageItemInfo.java:290)
                                                                                                        at com.android.systemui.toast.SystemUIToast.getBadgedIcon(SystemUIToast.java:286)
                                                                                                        at com.android.systemui.toast.SystemUIToast.inflateToastView(SystemUIToast.java:198)
                                                                                                        at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:90)
                                                                                                        at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:77)
                                                                                                        at com.android.systemui.toast.ToastFactory.createToast(ToastFactory.java:78)
                                                                                                        at com.android.systemui.toast.ToastUI.lambda$showToast$0(ToastUI.java:131)
                                                                                                        at com.android.systemui.toast.ToastUI.$r8$lambda$w_gPCh3F8Xxn1jN4lkQZoUci71c(Unknown Source:0)
                                                                                                        at com.android.systemui.toast.ToastUI$$ExternalSyntheticLambda0.run(Unknown Source:16)
                                                                                                        at com.android.systemui.toast.ToastUI.showToast(ToastUI.java:169)
                                                                                                        at com.android.systemui.statusbar.CommandQueue$H.handleMessage(CommandQueue.java:1494)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:210)
                                                                                                        at android.os.Looper.loop(Looper.java:299)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8319)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
2023-10-23 16:12:26.168  3055-3055  ndroid.systemu          com.android.systemui                 E  Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.169  3055-3055  ndroid.systemu          com.android.systemui                 E  Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.170  3055-3055  ResourcesManager        com.android.systemui                 E  failed to add asset path '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk'
                                                                                                    java.io.IOException: Failed to load asset path /data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk
                                                                                                        at android.content.res.ApkAssets.nativeLoad(Native Method)
                                                                                                        at android.content.res.ApkAssets.<init>(ApkAssets.java:295)
                                                                                                        at android.content.res.ApkAssets.loadFromPath(ApkAssets.java:144)
                                                                                                        at android.app.ResourcesManager.loadApkAssets(ResourcesManager.java:472)
                                                                                                        at android.app.ResourcesManager.access$000(ResourcesManager.java:84)
                                                                                                        at android.app.ResourcesManager$ApkAssetsSupplier.load(ResourcesManager.java:186)
                                                                                                        at android.app.ResourcesManager.createAssetManager(ResourcesManager.java:559)
                                                                                                        at android.app.ResourcesManager.createResourcesImpl(ResourcesManager.java:641)
                                                                                                        at android.app.ResourcesManager.findOrCreateResourcesImplForKeyLocked(ResourcesManager.java:696)
                                                                                                        at android.app.ResourcesManager.createResources(ResourcesManager.java:1049)
                                                                                                        at android.app.ResourcesManager.getResources(ResourcesManager.java:1152)
                                                                                                        at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:2453)
                                                                                                        at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1798)
                                                                                                        at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1784)
                                                                                                        at android.app.ApplicationPackageManager.getDrawable(ApplicationPackageManager.java:1545)
                                                                                                        at android.app.ApplicationPackageManager.loadUnbadgedItemIcon(ApplicationPackageManager.java:3088)
                                                                                                        at android.content.pm.PackageItemInfo.loadUnbadgedIcon(PackageItemInfo.java:290)
                                                                                                        at com.android.systemui.toast.SystemUIToast.getBadgedIcon(SystemUIToast.java:286)
                                                                                                        at com.android.systemui.toast.SystemUIToast.inflateToastView(SystemUIToast.java:198)
                                                                                                        at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:90)
                                                                                                        at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:77)
                                                                                                        at com.android.systemui.toast.ToastFactory.createToast(ToastFactory.java:78)
                                                                                                        at com.android.systemui.toast.ToastUI.lambda$showToast$0(ToastUI.java:131)
                                                                                                        at com.android.systemui.toast.ToastUI.$r8$lambda$w_gPCh3F8Xxn1jN4lkQZoUci71c(Unknown Source:0)
                                                                                                        at com.android.systemui.toast.ToastUI$$ExternalSyntheticLambda0.run(Unknown Source:16)
                                                                                                        at com.android.systemui.toast.ToastUI.showToast(ToastUI.java:169)
                                                                                                        at com.android.systemui.statusbar.CommandQueue$H.handleMessage(CommandQueue.java:1494)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:210)
                                                                                                        at android.os.Looper.loop(Looper.java:299)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8319)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)                           

原始答案

这个组合对我有效:

1. 在清单文件中添加android:roundIcon

<application
...
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round">

在Android Studio中可以生成圆形图标:图像资源 -> 启动器图标(自适应和传统) -> 选项 -> 圆形图标(API = 25) -> 生成:是 另外,如果重要的话,我的图标资源是PNG格式。
2. 重新启动设备。
此后,我的应用图标开始出现在Toast消息中。
POCO X3 NFC,MIUI Global 14.0.2,Android 12。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接