📜  android 12 toast 不显示应用程序图标 (1)

📅  最后修改于: 2023-12-03 15:29:20.465000             🧑  作者: Mango

Android 12 Toast 不显示应用程序图标

最近有开发者在使用 Android 12 SDK 进行开发时,发现在显示 Toast 时应用程序的图标不再显示,导致用户无法很好地识别是哪个应用程序弹出了 Toast。那么该怎么解决这个问题呢?

问题原因

在 Android 12 中,谷歌引入了一个新的风格 UI 样式,旨在提高整体应用程序的可视性和可用性。其中一个变化是 Toast 不再显示应用程序的图标,这是 Android 系统上比较常见的一种小型用户反馈。

解决方法
  1. 自定义 Toast 布局

自定义 Toast 布局是解决该问题的一种方法。通过自定义布局,可以轻松地添加应用程序的图标,从而使 Toast 显示更加具有可识别性。下面是一个简单的自定义 Toast 布局代码片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_toast"
    android:padding="16dp"
    >
    <ImageView
        android:id="@+id/toast_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"
        android:layout_marginEnd="16dp"
        android:contentDescription="@string/app_name"
        />
    <TextView
        android:text="This is a toast message!"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="16sp"
        />
</LinearLayout>

需要注意的是,在这个布局文件中,我们添加了一个图片视图用于显示应用程序的图标,其他内容则和标准 Toast 布局类似。同时需要在 AndroidManifest.xml 文件中添加以下代码:

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

上述代码用于将应用程序的图标作为 Toast 图片所需要的 @mipmap/ic_launcher

  1. 使用 SnackBar

SnackBar 是一个更加可定制、可交互的轻量级插件,相比 Toast 更加灵活。SnackBar 提供了一个可以设置图标的方法,因此可以轻松地解决图标不显示的问题。下面是一个简单的 SnackBar 使用示例:

Snackbar.make(view, "This is a SnackBar message", Snackbar.LENGTH_SHORT)
        .setIcon(ContextCompat.getDrawable(getContext(), R.mipmap.ic_launcher))
        .show();

需要注意的是,需要在工程的 build.gradle 文件中添加如下依赖:

dependencies {
    implementation 'com.google.android.material:material:1.4.0'
}

以上两种方式都可以解决 Android 12 Toast 不显示应用程序图标的问题,具体方法可以根据实际情况选择。