【问题标题】:How to Create a Toast at top of Screen In Android API 30+如何在 Android API 30+ 中在屏幕顶部创建 Toast
【发布时间】:2021-10-10 19:28:47
【问题描述】:

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

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

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

answer to this post recommends 使用了一个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()

【问题讨论】:

  • 您不能为此使用 toast,您必须自己实现或使用外部库

标签: android kotlin toast android-snackbar


【解决方案1】:

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

更多信息在这里: https://stackoverflow.com/a/58665768/13598222

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

【讨论】:

  • 在撰写本文时这似乎是准确的。我正在参考 2019 年的教科书,这指示我将 setGravity() 函数设置为 Gravity.TOP 而没有任何效果,这意味着系统正在覆盖此设置并强制将其置于底部。
【解决方案2】:

由于 API 30+ 已弃用此方法,因此无法在 android 11 中设置 toast 的重力,点击here 了解更多信息。

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2010-11-16
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多