带有 wrap_content 的 Android 7 WebView

标签 android html google-chrome webview scrollview

我在 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/

相关文章:

javascript - 用于自定义图像元素符号的 Nivo-Slider

javascript - AJAX 调用问题

javascript - 有没有办法用 Chrome 控制台捕获 javascript 'hover' 事件?

android - 使所有 gcm token 无效

具有基本身份验证的 Android OkHttp

java - 如何在过滤器 ListView- Item-Click 上加载特定 Activity (多个 Intent )?

java - org.openqa.selenium.NoSuchSessionException : invalid session id message= This version of ChromeDriver only supports Chrome version 74

java - RecyclerView 中的复选框变为 'sticky'

java - 通过浏览器使用 Java/C 访问 HTML TextField 组件

javascript - Chrome 扩展程序不与用户交互