Android Toast消息移除自带APPname\icon

68 阅读2分钟

服了,Toast都被Rom影响了

由于开发过程中,使用Toast时,总是看到消息的前面加上了app_name:消息,刚开始还以为是程序本来如此,后来才发现,有可能是手机Rom的问题。

通过以下的操作,就能覆盖Rom定制过的影响。

val toast = Toast.makeText(context, text, Toast.LENGTH_SHORT)
            toast.setText(text)
            toast.show()
fun showText(context: Context, text: String) {
        if (text.isEmpty()) {
            return
        }

        if (oldMsg.isEmpty()) {
            val toast = Toast.makeText(context, text, Toast.LENGTH_SHORT)
            toast.setText(text)
            toast.show()
            oldMsg = text
            oneTime = System.currentTimeMillis()
        } else {
            twoTime = System.currentTimeMillis()
            if (twoTime - oneTime > 2000) {
                val toast = Toast.makeText(
                    context,
                    text,
                    Toast.LENGTH_SHORT
                )
                toast.setText(text)
                toast.show()
                oneTime = twoTime
                oldMsg = text
            } else {
                if (oldMsg != text) {
                    val toast = Toast.makeText(
                        context,
                        text,
                        Toast.LENGTH_SHORT
                    )
                    toast.setText(text)
                    toast.show()
                    oneTime = twoTime
                }
            }
        }
    }

还有Rom定制带上appIcon的情况

国产手机有些部分会定制Rom中修改Toast的样式,只要setText覆盖就行

原来是Android 12以上系统更改了。

Android 12 及更高版本的系统强制行为:从 Android 12(API 31)开始,Google 改变了 Toast 的样式。为了统一用户体验,系统强制在文本左侧显示当前应用的图标,这是默认行为,无法通过简单的系统设置或原生 API 移除.

国产 ROM 的系统级修改:一些国产手机厂商(如小米、华为等)会对 Android 系统进行深度定制。它们可能会在系统层面上修改 Toast 的显示逻辑,比如默认就加上应用图标,或者允许用户/系统在某些情况下自动添加图标,导致看起来像是“自带”的。

一个简单的Toast,非得有不同的手机设备表现不一致,难绷呀!

deepseek提供的方案:

由于这是系统级别的行为,无法通过修改 Toast.makeText() 的代码来移除。最直接有效的方法是使用第三方工具库来接管 Toast 的创建和显示。

  • 推荐方案:使用轻量级第三方库
    目前比较优秀的方案是使用专门设计的 Toast 库,例如搜索结果中提到的 NexToast。这类库通过系统级代理机制,可以在不同 Android 版本和厂商系统上实现一致的 Toast 效果。

    • 核心优势

    • 移除图标:能够强制移除 Android 12+ 上的应用图标;

    • 高度自定义:可以轻松修改文本颜色、大小、背景等,甚至可以获取到内部的 TextView 进行精细控制;

    • 轻量兼容:体积小巧(如 3KB),并经过了全机型验证,能较好地兼容不同系统。

dependencies {
    implementation 'io.github.justlikecheese.nextoast:NexToast:1.2.2'
}

之后将代码中的 Toast.makeText(...).show() 替换为 NexToast.makeText(...).show() 就能看到效果。

测试后整理结果

val toast = NexToast.makeText(
                    context,
                    text,
                    NexToast.LENGTH_SHORT
                )
                toast.setText(text)//移除Android 12- 可能拼接的appName
                toast.show()