如何在 Android API 30+ 中在屏幕顶部创建 Toast

How to Create a Toast at top of Screen In Android API 30+

我是 Android 开发的新手,正在尝试创建一个简单的通知,告诉用户某些用户操作何时完成。

我希望通知出现在屏幕顶部并在不久后自行消失。基本上我要干杯。

但是在 Android 30+ 中,Toast.makeText() 方法不允许设置 toast 位置的选项,当我创建自定义 toast 时,我收到警告设置该视图已弃用。

使用了 snackbar,但我也找不到一种优雅的方式来将 snackbar 设置为出现在屏幕顶部。

实现我的目标的最佳方法是什么?

这是尝试将 toast 显示在屏幕顶部的已弃用代码

       val inflater = layoutInflater
        val layout: View = inflater.inflate(
            R.layout.custom_toast, null
        )
        val text: TextView = layout.findViewById(R.id.text)
        text.text = "Hello! This is a custom toast!"

        val toast = Toast(applicationContext)
        toast.setGravity(Gravity.TOP, 0, 0)
        toast.duration = Toast.LENGTH_LONG
        toast.view = layout
        toast.show()

如果您使用的是 Material Components library,则在其 Snackbar 实现中有一个 setAnchorView 方法,基本上可以让您指定小吃栏应位于上方的视图。因此,如果您的布局中有合适的布局(或者您可以添加一个,例如在适当的位置添加 Guideline),您可以使用它。

更多信息在这里:

我认为 Toasts 不再是一个选项,这似乎是现在的系统功能,您无法控制它如何呈现它们 - 您给它文本,这就是它。没有重力,没有自定义视图等,没有你自己的旋转!

无法在android11中设置吐司重力,因为此方法在API30+中已弃用,单击here可查找更多信息。