手机键盘弹出时页面内容不滚动的问题在PhoneGap中如何解决?

18

在我的应用程序中,当我尝试在注册页面中输入字段时,键盘会隐藏其他字段。以下是相关的截图: enter image description here

enter image description here

我们该如何解决这个问题?我想让页面可滚动。需要说明的是,我正在使用phonegap build,这肯定需要更改config.xml,但我真不知道该怎么做。


正如 Dylan 在下面评论的那样,这是移动设备滚动的一个怪异问题。在 PhoneGap/Mobile 中,滚动是最难维护的事情之一。特别是如果你想支持 Android 2.3 或 iOS 4。幸运的是,你有 overthrowjs 或 iscroll 等工具;但你必须确保从一开始就实现这些工具。滚动的另一个怪异问题是忘记锁定 html、body、zindex 元素等的滚动。当你的主要元素停止滚动时,这些外部元素将开始滚动,并在某些 Android 和 iOS 上产生各种有趣的反弹效果。 - Noogen
3个回答

53

我也遇到了这个问题——根本问题似乎是你不能使用Phonegap Build编辑androidManifest文件,你只能编辑config.xml文件,这实际上只允许你更改有限的一部分设置。

我想要的(许多人长期以来一直在呼吁)是能够更改windowSoftInputMode。

然而,我找到了解决方法——键盘出现在屏幕底部的字段上,我认为这是你正在遇到的相同问题。

对我来说——我正在使用最新的phonegap 2.7.0(但是通过在config.xml文件中指定phonegap 2.5.0也能够重现相同的行为和解决方案)

我发现的解决办法是在config.xml中更改此设置

<preference name="fullscreen" value="false" />

这意味着屏幕顶部会出现“状态栏”,这对我来说不是什么大问题(实际上,我认为将其放在那里更好,至少对我的应用程序来说是这样)- 将该设置设置为“false”而不是“true” - 当键盘打开时,页面现在向上滚动以显示您正在编辑的字段。 (更精确地说,我认为是视口发生了变化,而不是向上滚动)

希望这可以帮助解决您的问题...我搜索和尝试了几个小时才让它正常运作(如果我没有找到它,我就不得不放弃PhoneGap构建)

愉快! Dylan


1
在Android上,你不能只是在主活动中设置这个吗?android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" 这允许Android默认行为在键盘显示时缩小视图。在iOS上,您需要在配置xml中进行此设置:<preference name="KeyboardShrinksView" value="true" />以获得相同的行为。这假设您在元素上具有溢出滚动。 - Noogen
@Dylan Hamilton-Foster 你好,我尝试了你的答案,但问题仍然存在。我使用了自动完成文本框。所以现在用户无法看到完整的下拉菜单,因为键盘也会从字典中建议文本。我该如何关闭它? - Chintan Khetiya
@Dylan Hamilton-Foster,太好了!我找了很久才找到这个解决方案,但现在的问题是我也想要全屏。有没有办法可以让我全屏并摆脱这个问题? - Viken Patel
成功了!!谢谢...为了让它正常工作,你的activity标签中不应该有android:windowSoftInputMode="adjustPan"。 - Naveed

8

config.xml文件中尝试类似以下内容:

<preference name="fullscreen" value="false" />
<preference name="android-windowSoftInputMode" value="stateVisible" />

我尝试了value="stateUnchanged|adjustResize",效果非常完美。上述选项也可以使用,但对于我来说,应用程序启动时键盘是可见的,这在大多数情况下并不是用户想要的。 - karma

1
如果您使用Phonegap Build,尝试在config.xml中添加此内容,它可以帮助我解决相同的问题:
<gap:config-file platform="android" parent="/manifest/application">
        android:windowSoftInputMode="stateVisible"
</gap:config-file> 

感谢Manuel指出参数windowSoftInputMode="stateVisible"。

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