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

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

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

我的应用程序有启动器图标。 Android 12 初始屏幕正确显示应用程序图标。

通过代码显示吐司

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

编译SdkVersion/targetSdkVersion 31

android 模拟器 Google play Intel x86 Atom_64 系统映像 API 级别 31,修订版 8。

如何更改此默认 Toast 图标?

android toast android-12 android-api-31
7个回答
42
投票

对我来说,简单地重新启动设备就可以了。

更新到Android 12后我根本没有重新启动我的测试手机。我遇到了同样奇怪的错误,即我的应用程序发出的 Toast 中显示了通用应用程序图标。我尝试按照 Mickaël 的回答建议更改清单。没有运气。我最终得到了与开始调试之前应用程序完全相同的清单……然后我重新启动了设备。我的应用程序现在可以在 Toast 中可靠地显示正确的图标。发生了什么?不确定。我怀疑重新启动可能会触发图标缓存刷新,该刷新会抓取所有已安装的应用程序以搜索新的/更新的应用程序图标。


12
投票

这个问题似乎已报告给 Google,并分配给了 Google 工程师: https://issuetracker.google.com/issues/202863198


2
投票

我也可以重新启动手机。 Toast 现在显示在我的应用程序中配置的正确应用程序图标。如果它不适合您,请查看此声明并检查是否为您的应用程序图标正确设置了所有内容。我希望这会有所帮助:) https://developer.android.com/studio/write/image-asset-studio

PS:还有一个地方可以用来构建应用程序图标 https://romannurik.github.io/AndroidAssetStudio/index.html


1
投票

运行一些测试后,我发现使用“图像资源”>“通知图标”生成的可绘制对象设置

<application android:icon="@drawable/ic_stat_name" ...
会覆盖默认的 toast 图标。

但是,这不适用于作为“图像资源”>“启动器图标”生成的可绘制对象。所以在这一点上,我猜想 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
投票

更新:第二天就停止工作了:(

这很可能是 Android 12 的错误,因为重启后一切正常。但是,一旦您更改构建变体(例如,从调试到发布),一切都会停止工作。

在 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中可以生成圆形图标:

Image Asset -> Launcher Icons (Adaptive and Legacy) -> Options -> Round Icon (API = 25) -> Generate: Yes

另外,如果重要的话,我的图标资源是PNG格式的。

2。重新启动设备。

此后,我的应用程序图标开始出现在Toast消息中。

POCO X3 NFC、MIUI Global 14.0.2、Android 12。


0
投票

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

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