gpt4 book ai didi

android - 如何在 Android 中捕获 "virtual keyboard show/hide"事件?

转载 作者:IT老高 更新时间:2023-10-28 12:52:36 25 4
gpt4 key购买 nike

我想根据是否显示虚拟键盘来更改布局。我搜索了 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 preview和相应的documentation

Android 11 之前

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

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

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

https://developer.salesforce.com/docs/atlas.en-us.noversion.service_sdk_android.meta/service_sdk_android/android_detecting_keyboard.htm


注意

This solution will not work for soft keyboards andonConfigurationChanged will not be called for soft (virtual)keyboards.


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

http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

示例:

// 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();
}
}

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

关于android - 如何在 Android 中捕获 "virtual keyboard show/hide"事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com