我正在用 Java 编写一个 Android 应用程序,它的基本功能是作为私有(private)论坛的论坛阅读器。该应用程序显示线程列表,一旦用户选择一个线程,就会打开一个新的 Activity,该 Activity 基本上由单个 WebView 组成。该应用程序下载并解析论坛线程的源代码 (html),然后返回仅包含所需信息(例如作者、html 内容等)的“帖子”项目列表。最后,我只是从该帖子列表中构建一些 HTML 并将其显示在 WebView 中。
虽然这工作得很好,但图像存在问题:有时图像非常大,用户必须水平和垂直滚动才能看到整个图像。我想将这些图像的大小调整为 WebView 的宽度(以便它们始终完全可见),并可选择将它们转换为打开全尺寸图像的超链接。
由于我自己解析线程 HTML,理论上我可以采用每个 img 标签并向其添加“width=100%”属性。那么问题是小图像(例如表情符号!)也会调整大小并放大得很大。我只想调整太大而无法在设备上显示的图像的大小。
我怎样才能实现这个目标?我能想到的一些方法(但没有完全达到所需的解决方案)当然是:
- 在 WebView 中显示帖子内容之前修改其 HTML,
- 更改 WebView 用于显示帖子内容的 CSS 样式表
- 将 JavaScript 添加到 WebView 源
基本上我可以完全访问 HTML、CSS 和 Javascript,但我仍然不知道如何调整太大的图像大小(但不能调整不太大的图像)。
缩放不是问题,因为此 WebView 已禁用缩放。
有谁知道如何实现这种效果吗?谢谢!
最佳答案
您是否尝试过在 HTML 文件中设置视口(viewport)?
下面是一个示例,说明如何实现这一点,对于高密度、中密度和低密度设备,您可以设置最小比例、最大比例等参数。
function setViewPort() {
var viewport = document.querySelector("meta[name=viewport]");
//high-density screen
if (window.devicePixelRatio == 1.5) {
viewport.setAttribute("content", "target-densitydpi=high-dpi, width=device-width, height=device-height, initial-scale=1.15, minimum-scale=1.15, maximum-scale=1.8" );
}
//medium-density screen
else if (window.devicePixelRatio == 1.00) {
viewport.setAttribute("content", "target-densitydpi=low-dpi, width=device-width, height=device-height, initial-scale=1.3, minimum-scale=1.3, maximum-scale=1.3");
}
//low-density screen
else if (window.devicePixelRatio == 0.75) {
viewport.setAttribute("content", "target-densitydpi=device-dpi, width=device-width, height=device-height, maximum-scale=1.3");
}}
另请查看 Android 文档 Targeting Screens from WebApps
关于java - Android Webview - 如果太大则调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12618814/