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