当键盘在屏幕上时,是否可以在键盘上方而不是在其上显示 Android 中的 Toast 消息?
问问题
8422 次
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
于 2012-12-21T10:48:34.823 回答
1
3 年多过去了……Android 终于有了 API
正如Chris Banes所详述的,我们现在可以使用WindowInsets
API
解决 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 回答