【问题标题】:Android+PhoneGap: android:windowSoftInputMode doesn't seem to workAndroid+PhoneGap: android:windowSoftInputMode 似乎不起作用
【发布时间】:2013-11-14 22:36:00
【问题描述】:

我正在开发一个基于 PhoneGap 的应用程序,我在 Google 上搜索了很多关于如何让我的 webview 在虚拟键盘出现时调整其高度,或者至少获得虚拟键盘的高度。我发现很多帖子(包括stackoverflow)都这么说

android:windowSoftInputMode="adjustResize"

必须在清单中设置,我做到了。我还发现对于 PhoneGap config.xml 有

<preference name="android-windowSoftInputMode" value="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,可见键盘和隐藏键盘都保持不变。

请给我一些建议。

【问题讨论】:

  • 您解决了这个问题吗?如果是这样,请发布您的解决方案并将其标记为正确答案!

标签: android cordova android-virtual-keyboard


【解决方案1】:

如果您的应用程序处于全屏模式,windowSoftInputMode="adjustResize" 将不起作用(在config.xml 中将fullscreen 设置为true)。这是 Android 的问题,而不是 Cordova。 the issue CB-4404 在 Cordova 错误跟踪器中已提交数月,但最近发现 it is working as intended 在 Android 错误跟踪器中。

我通过将fullscreen 设置为false 解决了这个问题,因为我的应用不进入全屏状态不是问题。

【讨论】:

    【解决方案2】:

    我发现我需要做 3 件事来解决这个问题,并防止 actionBar 在软键盘启动时隐藏自身、滚动到视野之外。

    1) 在 AndroidManifest.xml 的相关活动中,我需要以下行:

    android:windowSoftInputMode="adjustResize"
    

    最初的问题是上面的行中出现了adjustPan。起初,只是上面的更改解决了问题。

    我正在进行的项目使用片段。在 onCreateView 方法中,不同的片段具有以下行:

    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    

    不幸的是,该行覆盖了应用程序清单中的 adjustResize 参数,并且在显示其他片段之后,我修复的片段再次损坏。所以,为了修复新的中断,我做了 2 件额外的事情。

    2) 我从其他片段的 onCreateView 方法中删除了 SOFT_INPUT_ADJUST_PAN 行,因为它不需要该行。

    3)在我主要关心的fragment的onCreateView方法中,我加了一行:

    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    

    实际上,执行第 2 项或第 3 项中的任何一项都可以解决问题。我做的都是彻底的。

    【讨论】:

      【解决方案3】:

      您可以在 android.manifest 中将此属性显式设置为“adjustNothing”,然后您无需将“全屏”模式设置为 false。 但是每次更新/添加android平台时都必须更新它。

      【讨论】:

        猜你喜欢
        • 2011-07-27
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        相关资源
        最近更新 更多