Toast.setView 已弃用:探寻自定义 Toast 的正确姿势
2023-01-18 07:44:55
Toast.setView() 的弃用:在 API 30+ 中自定义 Toast 的正确姿势
在 Android 应用开发中,Toast 是一个轻量级弹出提示框,用于显示简短的文本或自定义视图。自 API 30 起,Toast.setView() 方法已被弃用。本文将探讨这一弃用的原因,以及在 API 30+ 中如何正确地自定义 Toast。
为什么 Toast.setView() 被弃用?
在 API 30 之前,Toast.setView() 方法允许开发人员通过设置自定义视图来创建更复杂、更具互动性的 Toast。然而,随着 Android 系统的发展,Toast 的显示方式发生了变化。在 API 30 及以上版本中,Toast 被视为系统通知,显示在屏幕顶部,不会覆盖其他应用的内容。
由于这种变化,使用 Toast.setView() 设置的自定义视图可能会被其他应用的内容遮挡,导致无法正常显示。因此,为了确保 Toast 的一致性和可视性,Toast.setView() 方法已被弃用。
如何在 API 30+ 中自定义 Toast
尽管 Toast.setView() 已被弃用,但仍可以通过以下步骤在 API 30+ 中自定义 Toast:
- 使用 ToastCompat.makeText() 创建 Toast:
ToastCompat.makeText() 是 Toast.makeText() 的兼容版本,可以在所有 API 版本上使用。它允许开发人员创建具有自定义文本或视图的 Toast。
val toast = ToastCompat.makeText(context, "Hello, world!", Toast.LENGTH_SHORT)
- 获取 Toast 视图:
使用 ToastCompat.getView() 获取 Toast 的视图,该视图可以进行自定义。
val toastView = toast.view
- 自定义 Toast 视图:
对 Toast 视图进行自定义,例如设置背景颜色、文本颜色或添加其他控件。
toastView.setBackgroundColor(Color.RED)
toastView.setTextColor(Color.WHITE)
- 显示 Toast:
调用 toast.show() 显示自定义 Toast。
toast.show()
代码示例
import android.content.Context
import android.graphics.Color
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val toast = ToastCompat.makeText(this, "Hello, world!", Toast.LENGTH_SHORT)
val toastView = toast.view
toastView.setBackgroundColor(Color.RED)
toastView.setTextColor(Color.WHITE)
toast.show()
}
}
常见问题解答
Q1:为什么在 API 30+ 中 Toast 在后台时不显示?
A1: 因为 Toast 现在作为系统通知显示,而系统通知不会覆盖其他应用的内容。
Q2:弃用 Toast.setView() 会对现有的应用产生什么影响?
A2: 如果现有的应用使用 Toast.setView() 自定义 Toast,那么在 API 30+ 的设备上,这些 Toast 可能无法正常显示。
Q3:除了 Toast,还有其他显示自定义视图的轻量级选项吗?
A3: 可以考虑使用 Snackbar 或 AlertDialog。
Q4:ToastCompat.makeText() 和 Toast.makeText() 有什么区别?
A4: ToastCompat.makeText() 是 Toast.makeText() 的兼容版本,可以在所有 API 版本上使用。
Q5:如何进一步自定义 Toast 的显示时间或位置?
A5: 可以使用 Toast.setGravity() 和 Toast.setDuration() 方法来设置 Toast 的位置和显示时间。