gpt4 book ai didi

Android 软键盘在全屏时隐藏来自 CordovaWebView 的输入

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:52:42 25 4
gpt4 key购买 nike

我有一个显示一些 html 表单的 CordovaWebView。当我专注于一个输入字段时,Android 的软键盘会弹出,对于某些字段,根据它们的位置,它会位于它的顶部。基本上,它不会调整 CordovaWebView 的布局。

无论我做什么,我都无法改变这个,据说这与CordovaWebView处于全屏模式有关。

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

PS:是不是bug?

谢谢大家!

最佳答案

事实上,正如@user2493245 所说,这是一个众所周知的错误。但我找到了一个解决方法,至少在我的具体情况下是这样。

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

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");
};

基本上,在 KeyBoardShow 上,它使输入字段获得焦点并计算移动主体所需的像素数量,从而使用户能够看到输入字段。 onKeyBoardHide,简单地将主体置于其原始位置。

PS:这仅在视口(viewport)以 devicedpi 为目标时起作用,因为我们需要修改获取有关设备 dpi 的 dif 的方式。

PS2:第一段代码不是我的,我只是为了满足我的需要而编辑的。我在一个 SO 问题上看到了,但不幸的是现在我找不到它。如果我找到它,我会在这里发布链接。

关于Android 软键盘在全屏时隐藏来自 CordovaWebView 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com