我已经为 Firefox OS 开发了一个 Web 应用程序,但我想让它在 Android 中“本地”运行。我的应用程序由一个对话框组成div
它在可见时填充整个页面,我使用 Firefox 响应式设计工具对其进行了测试,并且它确实可以正确调整大小。当出现软键盘时,我希望对话框调整大小以适应剩余的视口,因为对话框底部有一些按钮。
我创建了一个具有单个活动的应用程序,其中仅包含WebView
。我想在键盘出现时调整视图大小,所以我使用了:
android:windowSoftInputMode="stateUnspecified|adjustResize"
这似乎没有任何区别WebView
当键盘可见时。我在网上查了一下,有很多人抱怨这个问题,但他们都有一个共同点,他们都在使用Theme.Black.NoTitleBar.Fullscreen
主题,而我不是。我尝试了该问题的所有解决方案,但没有一个有效。
然后我就开始怀疑是不是有bugWebView
这意味着它没有调整大小。所以,我写了一个自定义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
一旦内容加载完毕,键盘可见。