为什么在 Android 12 APi 31 上安装应用程序时 toast 会被截断

Ric*_*ins 5 java android android-toast android-12

该文档称,在针对Android 12 或更高版本的应用程序上,Toast 被截断为两行。我观察到的行为是,在运行 Android 12 或更高版本的设备上安装的应用程序上,Toast 被截断为两行。

具体来说,我的手机更新到 Android 12之前安装的一个应用程序的toast 不会被截断,但如果我将其安装在运行 Android 12 的模拟器上,它的 toast 就会被截断。我的手机更新到 Android 12后重建并安装的另一个应用程序的toast 被截断。

更新:

情况实际上似乎更复杂:行为还取决于设备,并且显然还取决于它是调试版本还是发布版本。被截断其 toast 的同一个应用程序可以在我的手机上使用发布版本正确显示它们,但在模拟器上使用相同的版本版本截断它们。

请注意,这与70307699不同,OP 将其更新targetSdk为 31。我的两个应用程序都targetSdk设置为小于 31。

我怎样才能获得记录的行为并恢复我的祝酒词?

Mic*_*uff 6

Android 平台团队并没有完全弃用 Toast,而是逐渐降低它们的用处,这是弃用的一种形式。

https://developer.android.com/reference/android/widget/Toast

最后一句指出:Starting with Android 12 (API level 31), apps targeting Android 12 or newer will have their toasts limited to two lines.

展望未来,如果我需要多行消息,我个人将使用 Snackbars。

val SNACKBAR_MAX_LINES = 8 // Increase maximum SnackBar line limit above 2
val snackbar = Snackbar.make(bottomNavigationView, "message", Snackbar.LENGTH_SHORT)
            (snackbar.view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView)
                .run {
                    maxLines = SNACKBAR_MAX_LINES 
                }

snackbar.show()
Run Code Online (Sandbox Code Playgroud)