WebView不会调整大小

时间:2013-08-19 10:15:58

标签: android webview resize android-webview

我为Firefox OS开发了一个Web应用程序,但我想让它在Android中“本机”运行。我的应用程序包含一个div对话框,它在可见时填充整个页面,我使用Firefox响应式设计工具进行了测试,并且可以正确调整大小。当出现软键盘时,我希望对话框调整大小到剩下的视口,因为对话框底部有一些按钮。

我使用仅包含WebView的单个活动创建了一个应用程序。我希望视图在键盘出现时调整大小,所以我使用了:

android:windowSoftInputMode="stateUnspecified|adjustResize"

当键盘可见时,WebView似乎没有任何区别。我在网上看了很多人抱怨这个问题,但他们都有相同的共同点,他们使用Theme.Black.NoTitleBar.Fullscreen主题,我不是。我尝试了解决这个问题的所有解决方案,但没有一个能够解决问题。

然后我开始怀疑WebView中是否存在错误,这意味着它没有调整大小。所以,我写了一个自定义View,用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会导致应用程序中所有元素的状态在运行时发生变化,因此重新加载它不是一种选择。)

我的问题是,当键盘可见时,是否有人知道在加载内容后调整WebView的方法。

2 个答案:

答案 0 :(得分:4)

这不完全是你的问题的答案,但是你也会注意到WebView在变大时会重新调整大小,但是当内容的高度降低时不会减少,因为我已经回答了这个问题:{ {3}}

在Google的问题跟踪器中引用了错误/功能: WebView height = wrap_content with changing font size doesn't work

请不要责怪我,我只是想指出您可能遇到的其他问题与WebView。

答案 1 :(得分:2)

问题原因是我在position: absolute position: fixed内使用div。外部div正在适当调整大小,但内部position: absolute没有正确调整大小。我必须使用transform的原因是因为WebKit中存在错误,这意味着您无法fixed {{1}}定位div。