我为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
的方法。
答案 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。