我已经为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,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在变大时会重新调整大小,但是当内容的高度降低时不会减少,因为我已经回答了这个问题:
WebView height = wrap_content with changing font size doesn’t work
Google问题跟踪器上引用了错误/功能:
https://code.google.com/p/android/issues/detail?id=18726
请不要怪我,我只是想指出你可能遇到的更多问题与WebView.