java - Android Webview - 如果太大则调整图像大小

标签 java android image webview image-resizing

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

相关文章:

javascript - 类型错误 : undefined is not an object

java - C# 和 Java - 将文件从 Android 上传到 WCF

android - 反射在签名构建 Android 中失败

android - 使用 diskpersistence 时有时不会触发 Firebase setValue() 方法

ios - 访问调整大小图像的原始像素数据时出错

javascript - 如何通过 onclick 事件计算图片的点击次数?

java - 通过 Java 运行 cmd 命令

java - JPA Map<用户,字符串> 映射

java - 如何从另一个java应用程序运行一个java应用程序并在主程序返回后保持运行?

java - android 上的 3ds 动画