我为 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
在键盘可见时加载内容后调整大小的方法。