在键盘上方显示吐司

时间:2012-12-21 10:43:33

标签: android keyboard toast

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

4 个答案:

答案 0 :(得分:6)

您可以通过以下代码更改烤面包位置。

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

答案 1 :(得分:5)

来自the documentation

  

定位敬酒

     

屏幕底部附近会出现标准吐司通知,   水平居中。你可以改变这个位置   setGravity(int, int, int)方法。这接受三个参数:a   Gravity常量,x-position偏移量和y-position偏移量。

     

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

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

如果要将位置微移到右侧,请增加值   第二个参数。要轻推它,增加最后一个的值   参数。

答案 2 :(得分:3)

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

How to check visibility of software keyboard in Android?

2。)如果键盘可见,则在另一个位置显示Toast:

How to change position of Toast in Android?

答案 3 :(得分:1)

三年多以后...而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())

祝酒快乐!