Android+PhoneGap: android:windowSoftInputMode似乎无效

8

我正在开发一个基于PhoneGap的应用程序,并且通过谷歌搜索了很多关于如何在虚拟键盘出现时使我的Webview自适应高度,或者至少获取虚拟键盘的高度的信息。我找到了很多帖子(包括stackoverflow),其中提到

android:windowSoftInputMode="adjustResize"

必须在清单文件中进行设置,我已经完成了这项工作。我还发现,对于 PhoneGap 的 config.xml 文件,有

<preference name="android-windowSoftInputMode" value="adjustResize"/>

我设置了Android应用程序的windowSoftInputMode属性为“stateVisible|adjustResize”,并将其复制到配置文件中。 我还尝试了两个参数都使用值“stateVisible | adjustResize”(而不仅仅是“adjustResize”),但我觉得它们都没有效果。 我不知道,也许我做错了什么,但您可以查看模拟器的截图(Android 4.0.3,但我还尝试了4.1.2和4.2.2):
http://screencast.com/t/Mm0mw8c693 - 键盘可见
http://screencast.com/t/lZ2DomqeRR - 键盘隐藏
在屏幕截图中,我有意捕获了我的清单和config.xml设置,以便您可以看到它们实际上存在。
我甚至录制了一个短视频-http://screencast.com/t/xI9PMcMJxxx

正如您所看到的,当键盘显示/隐藏时,没有任何视口调整发生。 我还使用console.log()检查了window.innerHeight,并且对于可见和隐藏的键盘保持不变。

请给我一些建议。


你解决了这个问题吗?如果是,请发布你的解决方案并将其标记为正确答案! - Bryan Herbst
3个回答

6
如果你的应用程序在全屏模式下(在config.xml中将fullscreen设置为true),那么windowSoftInputMode="adjustResize"将不起作用。这是Android的问题,而不是Cordova的问题。在Cordova bug跟踪器中提交了CB-4404问题数月,但最近发现在Android bug跟踪器上它正在按照预期工作

我通过将fullscreen设置为false来解决这个问题,因为我的应用程序不需要全屏。


1
我发现需要做三件事情才能解决这个问题,并防止actionBar在软键盘弹出时自动隐藏并滚动出视图。

1)在AndroidManifest.xml文件中,需要在相关的activity中添加以下行:

android:windowSoftInputMode="adjustResize"

原始问题在于上一行中存在adjustPan。起初,仅更改上面的内容就解决了问题。
我所在的项目使用片段。在onCreateView方法中,不同的片段有以下行:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

很不幸,那行代码覆盖了应用程序清单中的adjustResize参数,在显示其他片段后,我修复的片段再次出现问题。因此,为了修复新的问题,我做了两件额外的事情。
2)我从另一个片段的onCreateView方法中删除了SOFT_INPUT_ADJUST_PAN行,因为它不需要那行代码。
3)在我主要关注的片段的onCreateView方法中,我添加了一行代码:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

实际上,执行2或3中的任何一个都可以解决问题。我两个都做了以确保彻底。


0

你可以在 AndroidManifest 中显式地设置此属性为 "adjustNothing",这样就不需要将 "fullscreen" 模式设置为 false。 但是每次更新/添加 Android 平台时都必须更新它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接