Android软键盘在全屏幕时隐藏CordovaWebView的input

我有一个CordovaWebView呈现一些HTML表单。 当我专注于一个input字段时,Android的软键盘popup,对于某些字段,根据它们的位置,它会被放在上面。 基本上,它不调整CordovaWebView的布局。

无论我做什么,我都无法改变这一点,据说它与CordovaWebView处于全屏模式的事实有关。

我怎样才能解决这个问题?

PS:是不是,一个错误?

谢谢你们!

Solutions Collecting From Web of "Android软键盘在全屏幕时隐藏CordovaWebView的input"

事实上,这是一个很好的bug,正如@ user2493245所说。 但我find了一个解决方法,至less在我的具体情况。

在WebView上,只需检查视图可见区域的坐标。

final View activityRootView = this.root; activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { Rect r = new Rect(); //r will be populated with the coordinates of your view that area still visible. activityRootView.getWindowVisibleDisplayFrame(r); int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); if(heightDiff != lastValue) { if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... appView.sendJavascript("onKeyBoardShow(" + r.bottom + ");"); } else { appView.sendJavascript("onKeyBoardHide();"); } lastValue = heightDiff; } } }); 

正如您所看到的,我将这些信息发送给WebView。 在HTML上,我有这两个方法来处理这个问题:

 function onKeyBoardShow(bottom) { var diff = ($('input[type=text]:focus').offset().top - bottom) + 50; if(diff > 0) { $('body').css("top", (diff * -1) + "px"); } }; function onKeyBoardHide() { $('body').css("top", "0px"); }; 

基本上,onKeyBoardShow,它获得input字段的焦点,并计算移动身体所需的像素数量,允许用户看到input字段。 onKeyBoardHide,只是把身体放在原来的位置。

PS:这只有在视口目标devicedpi时才起作用,因为我们需要修改设备的DPI方式。

PS2:第一笔代码不是我的,我只编辑来填补我的需求。 我在一个SO问题上看到了这个问题,但不幸的是现在我找不到它了。 如果我find了,我会在这里发布链接。

我有同样的问题,我发现这是一个众所周知的错误。

一个解决方法可能是你写一个插件,在软键盘popup之前禁用全屏,然后重新启用它。

从清单中删除android:theme="@android:style/Theme.NoTitleBar.Fullscreen" ,并添加这两行代码:

 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

确保你的onCreate方法如下所示:

 @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); super.onCreate(savedInstanceState); setContentView(R.layout.yourLayout); // Your code ... } 

一切都将工作:D。