Android 在键盘上方显示烤面包片

Android 在键盘上方显示烤面包片,android,keyboard,toast,Android,Keyboard,Toast,当键盘在屏幕上时,是否可以在键盘上方而不是在键盘上显示祝酒词 定位您的祝酒词 屏幕底部会出现标准的toast通知, 水平居中。您可以使用 setGravity(int,int,int)方法。它接受三个参数:a 重力常数、x位置偏移和y位置偏移 例如,如果您决定祝酒词应出现在 左上角,可以按如下方式设置重力: toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); 如果要向右移动该位置,请增加 第二个参数。若要向下移动,请增加最后一个的值 参数 您可以

当键盘在屏幕上时,是否可以在键盘上方而不是在键盘上显示祝酒词

定位您的祝酒词

屏幕底部会出现标准的toast通知, 水平居中。您可以使用
setGravity(int,int,int)
方法。它接受三个参数:a
重力
常数、x位置偏移和y位置偏移

例如,如果您决定祝酒词应出现在 左上角,可以按如下方式设置重力:

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
如果要向右移动该位置,请增加 第二个参数。若要向下移动,请增加最后一个的值 参数


您可以通过以下代码更改toast的位置

Toast toast= Toast.makeText(getApplicationContext(), 
"Your string here", Toast.LENGTH_SHORT);  
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
1.)检查键盘是否可见:

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


三年多之后。。。Android终于有了API

如所示,我们现在可以使用
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个代表…嗨,亚历山大。谢谢你的回答。这看起来很有希望:)我会试着看一看,如果它有效,我可能会在这里更改正确的答案。不过,我不确定什么时候能做到。