Android WebView没有';t调整大小
我已经为Firefox OS开发了一个web应用程序,但我想让它在Android中“本地”运行。我的应用程序由一个对话框组成,这个对话框是一个Android WebView没有';t调整大小,android,webview,resize,android-webview,Android,Webview,Resize,Android Webview,我已经为Firefox OS开发了一个web应用程序,但我想让它在Android中“本地”运行。我的应用程序由一个对话框组成,这个对话框是一个div,当它可见时会填满整个页面,我已经使用Firefox响应式设计工具对其进行了测试,它确实可以正确调整大小。当出现软键盘时,我希望将对话框调整为剩余视口的大小,因为对话框底部有一些按钮 我用一个活动创建了一个应用程序,其中只包含一个WebView。我想在键盘出现时调整视图的大小,因此我使用了: android:windowSoftInputMode="
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中的一个bug导致修复了元素对任何-WebKit转换都没有反应,因此我必须找到另一种方法。很高兴能提供帮助。总的来说,我发现使用WebView的问题太多(特别是在设备之间),我会不惜一切代价避免使用它们。