【问题标题】:WebView not scaling correctly?WebView 不能正确缩放?
【发布时间】:2015-07-14 07:48:48
【问题描述】:

我正在使用 WebView 将 HTML 转换为图像。 HTML 有一个固定的 600 像素(使用 CSS 定义)。

WebView 布局为:

<WebView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none"/>

在加载 html 文档时,我通过以下方式获取 webview 大小:

int width = webView.getMeasuredWidth();
int height = webView.getMeasuredHeight();

我注意到的第一个奇怪的事情是宽度是 650。文档显示出来了,我需要水平滚动才能查看所有内容(低分辨率设备)。

下一步是将webview转换成图片:

bitmap = Bitmap.createBitmap(600, height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
webView.draw(c);

但是,将 webview 转换为位图会裁剪掉右侧部分(在 webview 中不可见的区域)。

当我在 HTML 文档中定义 600 时,为什么 webview 宽度为 650?为什么图像被裁剪?

【问题讨论】:

    标签: android android-webview android-imageview


    【解决方案1】:

    首先,请注意 HTML (CSS) 像素与屏幕像素不同。这是因为你可以缩放你正在查看的页面——这不会影响它的 CSS 尺寸(简单地说,HTML 布局不会“注意到”缩放),而是会改变你的 CSS 像素中有多少屏幕像素.

    当您为屏幕上的 WebView 调用 WebView.draw() 时,它会根据 WebView 的当前大小绘制到画布上——基本上,您在屏幕上看到的就是您在位图中看到的。

    因此,有两种方法可以做你想做的事:

    1. 使 WebView 宽度足够大以容纳您的页面。为此,您需要将 WebView 放在 ScrollView 中,并相应地设置 WebView 的宽度。

    2. 调整显示内容的大小,使其适合屏幕。为此,您可以使用两个 WebView 设置:setUseWideViewport(true)setLoadWithOverviewMode(true),以及&lt;meta name="viewport"&gt; HTML 标记中的initial-scale 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多