怎么捕捉 虚拟键盘显示/隐藏"?Android中的事件?

本教程将介绍如何捕捉“虚拟键盘显示/隐藏"?Android中的事件?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么捕捉 虚拟键盘显示/隐藏"?Android中的事件? 教程 第1张

问题描述

我想根据是否显示虚拟键盘来更改布局.我搜索了 API 和各种博客,但似乎找不到任何有用的东西.

有可能吗?

谢谢!

推荐答案

2020年更新

这现在是可能的:

在 Android 11 上,您可以这样做

view.setWindowInsetsAnimationCallback(object : WindowInsetsAnimation.Callback {
 override fun onEnd(animation: WindowInsetsAnimation) {
  super.onEnd(animation)
  val showingKeyboard = view.rootWindowInsets.isVisible(WindowInsets.Type.ime())
  // now use the boolean for something
 }
})

还可以听键盘显示/隐藏的动画,做相应的过渡.

我推荐阅读Android 11 预览版 和相应的文档

Android 11 之前

但是,这项工作尚未在 Compat 版本中提供,因此您需要求助于 hack.

您可以获得窗口插图,如果底部插图大于您认为相当好的某个值(通过实验),您可以认为这是显示键盘.这不是很好,在某些情况下可能会失败,但没有框架支持.

对于这个确切的问题 https://stackoverflow.com/a/36259261/372076,这是一个很好的答案.或者,这里有一个页面提供了一些不同的方法来实现这个 pre Android 11:

此解决方案不适用于软键盘和onConfigurationChanged 不会被调用软(虚拟)键盘.


您必须自己处理配置更改.

示例:

// from the link above
@Override
public void onConfigurationChanged(Configuration newConfig) {
 super.onConfigurationChanged(newConfig);

 
 // Checks whether a hardware keyboard is available
 if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
  Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
 } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
  Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
 }
}

然后只需更改某些视图的可见性、更新字段并更改布局文件.

好了关于怎么捕捉“虚拟键盘显示/隐藏"?Android中的事件?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。