我在 ScrollView
中有一个带有 android:layout_height="wrap_content"
的 WebView
。在 Android 7 之前,这会导致 WebView 调整到我使用 loadData
设置的本地 html 内容的高度。不过,在我的 Android 7 Nexus 5X 上,WebView 高度似乎不可靠,有时它只显示第一行文本的一部分,有时在内容末尾有很大的差距。
我认为这可能是由于谷歌现在从牛轧糖开始使用 Chrome for WebViews。
有人对此问题有解释或修复/解决方法吗?
将 View 包含在 RecyclerView
的单元格中可能也很重要。
最佳答案
解决方法是:
等待 html 页面加载并在页面内运行 JS 以检测内容高度并将其设置为 WebView 布局参数高度。
在页面内运行JS很容易,只需导航到url即可
javascript:Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight);
要将结果传递给 Java 代码,您必须按照此处所述提供 Java-Java 脚本接口(interface) https://developer.android.com/guide/webapps/webview.html (将JavaScript代码绑定(bind)到Android代码)
您要导航的 url 必须看起来像
javascript:myfunc(Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight));
将调用 myfunc,您将获得页面的高度。现在只需将高度设置为 WebView 高度。
关于带有 wrap_content 的 Android 7 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878485/