7

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

4

2 回答 2

4

这不完全是您问题的答案,但是您还会注意到 WebView 在变大时会重新调整大小,但在内容高度减小时不会减小,正如我已经在这个问题上回答的那样:WebView height = wrap_content更改字体大小不起作用

该错误/功能在 Google 的问题跟踪器中被引用: https ://code.google.com/p/android/issues/detail?id=18726

请不要怪我,我只是想指出您在使用 WebView 时可能遇到的更多问题。

于 2013-08-25T09:29:17.607 回答
2

问题原来是我position: absoluteposition: fixed div. 外部div调整大小正确,但内部没有。我不得不使用的原因position: absolute是因为 WebKit 中存在一个错误,这意味着您无法transform fixed定位 div。

于 2013-08-23T09:35:52.673 回答