Android WebView没有';t调整大小

Android WebView没有';t调整大小,android,webview,resize,android-webview,Android,Webview,Resize,Android Webview,我已经为Firefox OS开发了一个web应用程序,但我想让它在Android中“本地”运行。我的应用程序由一个对话框组成,这个对话框是一个div,当它可见时会填满整个页面,我已经使用Firefox响应式设计工具对其进行了测试,它确实可以正确调整大小。当出现软键盘时,我希望将对话框调整为剩余视口的大小,因为对话框底部有一些按钮 我用一个活动创建了一个应用程序,其中只包含一个WebView。我想在键盘出现时调整视图的大小,因此我使用了: android:windowSoftInputMode="

我已经为Firefox OS开发了一个web应用程序,但我想让它在Android中“本地”运行。我的应用程序由一个对话框组成,这个对话框是一个
div
,当它可见时会填满整个页面,我已经使用Firefox响应式设计工具对其进行了测试,它确实可以正确调整大小。当出现软键盘时,我希望将对话框调整为剩余视口的大小,因为对话框底部有一些按钮

我用一个活动创建了一个应用程序,其中只包含一个
WebView
。我想在键盘出现时调整视图的大小,因此我使用了:

android:windowSoftInputMode="stateUnspecified|adjustResize"
当键盘可见时,这似乎对
WebView
没有任何影响。我上网查了一下,有很多人抱怨这个问题,但他们都有一个共同点,他们都使用
主题.Black.NoTitleBar.Fullscreen
主题,而我不是。我尝试了解决那个问题的所有方法,但没有一个奏效

然后我开始怀疑
WebView
中是否有bug,这意味着它没有调整大小。因此,我编写了一个自定义的
视图
,它在
onLayout
中打印尺寸

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    Log.d(TAG, t + " " + r + " " + b + " " + l);
}
果然,当键盘出现和消失时,视图的大小被正确调整。因此,我做了更多的研究,发现了一些答案,即需要隐藏
WebView
,重新加载,然后再次显示

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    Log.d(TAG, t + " " + r + " " + b + " " + l);

    mWebView.setVisibility(View.GONE);
    mWebView.layout(l, t, r, b);
    mWebView.invalidate();
    mWebView.reload();
    mWebView.setVisibility(View.VISIBLE);
}
同样,这并没有解决我的问题。(顺便说一句,这是一个只有一个.html文件的web应用程序,JS会导致应用程序中所有元素的状态在运行时发生变化,因此不能重新加载它。)


我的问题是,是否有人知道在键盘可见的情况下加载内容后调整
网络视图大小的方法。

问题是,我在
位置:fixed
div中使用了
位置:absolute
。外部的
div
正在正确调整大小,但内部的没有。我不得不使用
position:absolute
的原因是WebKit中有一个bug,这意味着你不能
转换
固定的
定位div。

这不完全是你问题的答案,但你也会注意到WebView在变大时确实会变大,但当内容的高度降低时不会降低,因为我已经回答了这个问题:

该缺陷/功能在谷歌的问题追踪器上被引用:


请不要责怪我,我只是想指出,对于WebView可能遇到的进一步问题

我以前从未遇到过这个问题。我的网络视图及其内容总是能正确调整大小。您正在使用什么设备进行测试?此外,我使用“stateHidden | adjustResize”哇。。。你说得对!我创建了一个空的html页面,其中有一个
固定的
定位div,并按预期调整了大小。问题是我必须使用
position:absolute修复了
元素对任何
-WebKit转换都没有反应,因此我必须找到另一种方法。很高兴能提供帮助。总的来说,我发现使用WebView的问题太多(特别是在设备之间),我会不惜一切代价避免使用它们。