8

当键盘在屏幕上时,是否可以在键盘上方而不是在其上显示 Android 中的 Toast 消息?

4

4 回答 4

9

您可以通过以下代码更改吐司位置。

Toast toast= Toast.makeText(getApplicationContext(), 
"Your string here", Toast.LENGTH_SHORT);  
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
于 2012-12-21T10:45:08.690 回答
5

文档中,

定位你的吐司

标准的 toast 通知出现在屏幕底部附近,水平居中。setGravity(int, int, int)您可以使用该方法更改此位置 。它接受三个参数: Gravity常量、x-position偏移量和y-position偏移量。

例如,如果你决定 toast 应该出现在左上角,你可以像这样设置重力:

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

如果要向右微移位置,请增加第二个参数的值。要向下微调,请增加最后一个参数的值。

于 2012-12-21T10:44:37.713 回答
3

1.) 检查键盘是否可见:

如何在 Android 中检查软件键盘的可见性?

2.) 如果键盘可见,则在不同位置显示 Toast:

如何在 Android 中更改 Toast 的位置?

于 2012-12-21T10:48:34.823 回答
1

3 年多过去了……Android 终于有了 API

正如Chris Banes所详述的,我们现在可以使用WindowInsetsAPI

解决 Toast above 软键盘的核心 API 是:

val insets = ViewCompat.getRootWindowInsets(view) // get insets
val imeVisible = insets.isVisible(Type.ime()) // is keyboard visible?
val imeHeight = insets.getInsets(Type.ime()).bottom // voila, your offset

所以我为 Toast 构建了一个扩展函数:

/**
 * Shows toast above soft keyboard, if exists
 */
 fun Toast.showAboveKeyboard(containerView: View) {

   // get y offset to let toast appear above soft keyboard
   val insets = ViewCompat.getRootWindowInsets(containerView)
   val imeVisible = insets?.isVisible(WindowInsetsCompat.Type.ime()) ?: false
   val imeHeight = insets?.getInsets(WindowInsetsCompat.Type.ime())?.bottom
   val fallbackYOffset = containerView.resources.getDimensionPixelOffset(R.dimen.thirtytwo_grid_unit)
   val noSoftKeyboardYOffset =
    containerView.resources.getDimensionPixelOffset(R.dimen.three_grid_unit)
   setGravity(
        Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM,
        0,
        if (imeVisible) imeHeight ?: fallbackYOffset else noSoftKeyboardYOffset
   )
   show()
}

片段中的用法:

Toast.makeText(requireContext(), "Hello Toast", Toast.LENGTH_SHORT)
     .showAboveKeyboard(requireView())

祝吐司快乐!

于 2020-10-20T07:35:00.950 回答