0

有什么方法可以将我的 Toast 消息放在屏幕中央?因为Toast.setGravity()根据 android 官方文档,Android 11 及以上设备(API 级别 30 及以上)不支持。我无法将吐司放在屏幕中央。我到处寻找解决方案,但没有运气。我的要求是,我想在屏幕中央显示一条类似于 toast 的消息。我使用了一家小吃店,但这不是我所期望的。我没有必要展示吐司。我只是想要一些东西来模仿与吐司相同的功能,即在屏幕中央显示反馈消息。谢谢你。

4

2 回答 2

0

如果您的层次结构中有一个屏幕大小的 ConstraintLayout,以下是使用 Snackbar 执行此操作的方法。

在主 Activity 的 ConstraintLayout 中,在屏幕中央添加一条水平线:

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/centerHorizontalGuideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent=".50" />

然后在您的 Activity 中,您可以将 Snackbar 的锚点视图设置为此指南。设置锚点视图会告诉它在屏幕上出现的位置,而不是底部的默认值。

fun showCenteredSnackbar(@StringRes messageId: Int, duration: Int = Snackbar.LENGTH_SHORT) {
    Snackbar.make(this, binding.container, getText(messageId), duration)
        .setAnchorView(binding.centerHorizontalGuideline)
        .show()
}

binding.container约束布局在哪里。

您的片段可以使用(requireActivity() as MainActivity).showCenteredSnackbar().

于 2021-10-28T13:15:07.127 回答
0

为 Toast 设置重力的限制仅适用于文本 toast(使用Toast.makeText(...)方法创建)。您可以创建一个常规的 toast(通过调用标准构造函数 - Toast(activity)),设置重力并通过设置自定义视图对其进行自定义。

结果,你会得到这样的东西:

val customToast = Toast(this).also {
  // View and duration has to be set 
  val view = LayoutInflater.from(context).inflate(R.layout.foo_custom_toast, null)
  it.setView(view)
  it.duration = Toast.LENGTH_LONG
  
  it.setGravity(Gravity.CENTER, 0, 0)
}

另外,你可以查看这个问题这篇文章,我认为这会对你有所帮助。

Ps 如果您只需要在 toast 中显示文本,则在 Toast 的自定义视图中添加一个 textView,然后在设置 toast(设置自定义视图)时将文本设置为此 textView。另外,通过customView,你可以随意自定义Toast。

于 2021-10-28T10:22:16.470 回答