我已经开发了一个针对Firefox OS的Web应用程序,但我希望使其在Android上“本地”运行。我的应用程序由一个对话框组成,它是一个
我创建了一个只包含一个
当键盘出现时,似乎不会对
于是我开始怀疑是否存在
div
,当可见时填充整个页面,我使用了Firefox响应式设计工具进行测试,并且它可以正确地调整大小。当软键盘出现时,我希望对话框能够调整到剩余的视口大小,因为对话框底部有一些按钮。我创建了一个只包含一个
WebView
的单个活动应用程序。我希望当键盘出现时视图可以调整大小,所以我使用了:android:windowSoftInputMode="stateUnspecified|adjustResize"
当键盘出现时,似乎不会对
WebView
造成任何影响。我在网上搜索后发现很多人抱怨这个问题,但他们都有一个共同点,即使用 Theme.Black.NoTitleBar.Fullscreen
主题,而我没有使用该主题。我尝试了所有解决方案,但没有一个有效。于是我开始怀疑是否存在
WebView
中的一个 bug 导致它无法调整大小。因此,我编写了一个自定义的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
大小的方法。
fixed
定位的div,并且它按预期进行了调整大小。问题在于,由于WebKit中的一个错误导致fixed
元素不会对任何-webkit-transform
做出反应,所以我必须使用position: absolute;
,因此我必须找到另一种方法。 - Tom Leese