为Webview设置缩放

36

我有一个 WebView 和两个要在其中打开的 URL。我的目标是,在我为第一个 URL 设置缩放级别后,当我转到第二个 URL 时,它也应该具有相同的缩放级别。但现在,两个 URL 的缩放级别都会重置。

谢谢, Farha

9个回答

48

我相信这将适用于这种情况

mWebView.setInitialScale(ZOOM_LEVEL);

其中 ZOOM_LEVEL 可以是例如 25 表示 25%,或者 150 表示 150%。


webview.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR); 的正确答案已经被弃用。 - Gal Rom

35

使用WebSettings类。

webview.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);

请注意,尽管自 API Level 1 起就提供了 WebSettings,但是 WebSettings.ZoomDensity 只有在 API Level 7 及以上版本可用。适用于所有设备分辨率。

此外,为了在 webView 上启用缩放,请添加以下代码:

webView.getSettings().setBuiltInZoomControls(true);

4
看起来这已经过时了。 - Jordan Robinson
1
该属性已被弃用,请查看我的更新答案以克服它。 - King of Masses

23

setDefaultZoom已被弃用。

webview.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);

因此,您可以像下面这样使用:

webview.setInitialScale(1);
webview.getSettings().setLoadWithOverviewMode(true); 
webview.getSettings().setUseWideViewPort(true);

这将帮助您移除

setDefaultZoom(WebSettings.ZoomDensity.FAR).

13

在离开第一页之前,请使用

int scale = 100 * webView.getScale();

然后在加载第二个页面之后,使用

webView.setInitialScale( scale );

1
getScale(); 现在已经被弃用。 - dephinera
由于 getScale() 已被弃用,我使用了 getScaleY() 并实现了相同的效果。 - Smitty-Werben-Jager-Manjenson

4
@John提供了正确的思路,但一个命令就足够了,因为在页面显示之前您可以获取和设置:
private class MyWebViewClient extends WebViewClient {
    public void onPageFinished(WebView view, String url) {
        view.setInitialScale((int)(100*view.getScale()));
    }
}

然后将此设置为您的 WebView 的客户端:

webview.setWebViewClient(new MyWebViewClient());

我正在使用一个Marshmallow平板电脑,但是无论如何都无法使页面缩放到webview的大小... 直到我看了你的帖子。我使用了你的代码,除了一个更改,因为.getScale()已经过时了:view.setInitialScale((int)(100*view.getScaleY())); - Smitty-Werben-Jager-Manjenson

3

您可以将缩放设置为0.1f

mWebView.zoomBy(0.1f);


这是关于Lollipop的最佳答案。 - superuser

2

尝试这个东西

int default_zoom_level=100;
Point Scroll=new Point(0,0);
webview1.setInitialScale(default_zoom_level);
    webview1.loadData("url");

在进行缩放或滚动后,由于比例尺可能会发生变化,因此需要计算比例尺级别并沿X和Y轴滚动。

int current_scale_level=(int)webview1.getScale()*100;
Scroll.x=webview1.getScrollX();
Scroll.y=webview1.getScrollY();

then before loading of next webview do this

webview2.setInitialScale(current_scale_level);
    webview2.loadData("url");
webview2.scrollTo(Scroll.x,Scroll.y);

不完全是我想要的,但给了我解决问题的思路。谢谢。 - Ayaz Alifov

0
我发现这篇博客很有帮助:
它将帮助您设置初始缩放级别,并在搜索更改时调整Webview内容的大小。
// 设置搜索栏的初始进度 mSeekBar.setProgress(mWebView.getSettings().getTextZoom()/25);
    // Set a change listener for seek bar
    mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
            /*
                public abstract void setTextZoom (int textZoom)
                    Sets the text zoom of the page in percent. The default is 100.

                Parameters
                    textZoom : the text zoom in percent
            */

            // Zoom the web page text
            // We will allow text zooming 25% to 300%
            mWebView.getSettings().setTextZoom(i*25);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

http://android--code.blogspot.in/2016/01/android-how-to-change-webview-text-size.html


0

WebView的缩放可以通过zoomIn()zoomOut()方法进行程序控制


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接