在键盘上方显示Toast

问题描述 投票:0回答:3

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

android keyboard toast
3个回答
9
投票

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

Toast toast= Toast.makeText(getApplicationContext(), 
"Your string here", Toast.LENGTH_SHORT);  
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();

1
投票

3 年多后...Android 终于有了 API

Chris Banes 详细所示,我们现在可以使用

WindowInsets
API

解决Toast上面软键盘的核心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())

祝你吐司快乐!


-1
投票

解决这些吐司问题(传统上被称为该死的通知)的唯一好的答案是,谷歌的 Android 工作人员为自己的白痴行为道歉,并推出更新,让他们处于应有的状态,即:顶部像其他东西一样隐藏在下拉列表中。我不知道谁是那个该死的白痴,谁认为让这些东西不仅出现在常规屏幕上,而且覆盖他妈的键盘是个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.