Android 应用中的软键盘消失

Disappearing soft keyboard in Android app

我的 Android 应用程序出现异常问题。每当我在网页上输入一个输入字段时,软键盘出现并立即消失。

该应用程序集成了浏览器功能的 Crosswalk,虽然我想说这曾经在我以前使用 WebView 时发生过。

这是问题的屏幕录像:

似乎正在向上推或调整 HTML 以适应软键盘,但由于某种原因失败了。

有谁知道为什么会发生这种情况,更重要的是,知道如何解决它?


编辑:我发现如果我将 android:windowSoftInputMode="adjustPan" 添加到我的 AndroidManifest.xml 文件中,问题就不会发生.将其设置为 "adjustResize" 使其始终发生。

如果有人知道答案,我仍然希望得到一些帮助:)

此问题的解决方案是解决 Android 怪癖(其中有很多)。根据我的阅读,iOS 上不会发生这种情况,但我还没有对其进行测试以确认。

问题是出现软键盘时会触发 window 调整大小。当您使用响应式网站时,就像我一样,您可能会有处理调整大小的代码。当键盘出现时,会发生 window 调整大小,并且键盘会因自定义调整大小代码而消失。


解决方案一:

解决方案是将 resize 事件重写为 orientationchange 事件。虽然这不是一个理想的情况,但如果一个应用程序是唯一的目标,那么它应该没问题。

为澄清起见,更改自(使用 jQuery):

$(window).resize (function ()
{
    // Code on resize
});

改为(使用jQuery):

$(window).bind ('orientationchange', function ()
{
    // Code on screen rotation
});

我不确定浏览器是否支持 orientationchange,因为它在 http://caniuse.com 上不可用,但我可以说它确实适用于当前版本的 Crosswalk (19.49.514.4).


方案二:

chrisdew 在 上建议的替代解决方案建议 "adding a listener to the input's focus event which disables reacting to resize events for 0.5s."。如果您乐于在输入聚焦时有 0.5 秒的延迟,这也应该有效。