如何设置网页视图的初始缩放/宽度


76

我正在尝试使WebView具有与android浏览器类似的行为。浏览器以试图使其宽度适合屏幕的方式打开所有页面。但是,WebView的默认行为是从100%像素比例开始,因此它开始在左上角放大。

在过去的几个小时中,我试图找到一种方法来使WebView像在浏览器中一样将页面缩放到屏幕上,但是我没有运气。有没有人找到实现这一目标的方法?

我看到的是一个名为setLoadWithOverviewMode的设置,但这似乎根本没有做任何事情。我还尝试了setInitialScale,但在不同的屏幕尺寸和网页尺寸上却没有浏览器缩放那样优雅。

任何人都有线索吗?

谢谢

编辑:Brian的方法似乎在手机处于横向而不是纵向时有效。在纵向中,它很接近,但仍不能适合页面中的整个屏幕。我希望以此为出发点,希望能有一种可靠的方法来使初始缩放比例适合页面在任何方向或屏幕尺寸下的宽度。


您是否找到了解决方案?
塞缪尔

@Sam,是的,下面接受的解决方案对我有用。
cottonBallPaws 2011年

由于某种原因,我花了整整一天时间解决这个问题,并且它仅在api7中有效,而在以上版本中则无效。最后必须使用setInitialScale实施相同的操作并手动计算初始比例。顺便说一下,我有一个480x800尺寸的图像。
塞缪尔

每次我都试图在设备上为我工作,从API级别7向上穿过14
cottonBallPaws

Answers:


159

以下代码加载了完全缩小的Google主页的桌面版本,以适合webview854x480像素屏幕上Android 2.2中的我。当我重新定位设备并以纵向或横向重新加载设备时,页面宽度每次都完全适合视图。

BrowserLayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

     <WebView android:id="@+id/webview"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent" />
</LinearLayout>

Browser.java:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class Browser extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.BrowserLayout);

        String loadUrl = "http://www.google.com/webhp?hl=en&output=html";

        // initialize the browser object
        WebView browser = (WebView) findViewById(R.id.webview);

        browser.getSettings().setLoadWithOverviewMode(true);
        browser.getSettings().setUseWideViewPort(true);

        try {
            // load the url
            browser.loadUrl(loadUrl);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

谢谢Brian,乍一看似乎很奏效。在奖励赏金之前,我将测试更多站点,但这看起来很有希望!
cottonBallPaws

这是一个很好的解释。+1
塔里克

它对我不起作用。似乎缩放是在页面加载后设置的
jiduvah 2012年

效果很好...人们如何提出这些解决方案?反复试验,还是您有一些神圣的书卷?
CloudMeta 2012年

6
此解决方案也不适用于我。我在内容的右边和底部有很多空白。我从资产文件夹而不是网页加载图像。那可能是为什么吗?
SilithCrowe

20

我弄清楚了为什么纵向视图不能完全填充视口。至少在我的情况下,这是因为滚动条始终显示。除了上面的视口代码外,请尝试添加以下代码:

    browser.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    browser.setScrollbarFadingEnabled(false);

这将导致滚动条不占用布局空间,并允许网页填充视口。

希望这可以帮助


12

这是一个古老的问题,但是让我添加一个细节,以防万一像我这样的更多人到达这里。

布赖恩(Brian)发布的出色答案对Jelly Bean不起作用。我还必须添加:

browser.setInitialScale(30);

该参数可以是调整大小后的内容小于Webview宽度的任何百分比。然后setUseWideViewPort(true)将内容宽度扩展到Webview宽度的最大值。


我在webview中显示的网页包含很多Javascript,它更像电视中的OSD,带有按钮的小部件。我使用了您的解决方案,对此有2条评论:1. webview的第一次加载不成功,webview是黑色的。2.第二个是正确的,但是我可以双击,这是我不想要的,因为它可以缩放然后,小部件和按钮停止工作。您能提供什么帮助吗?谢谢。
MartinC 2013年

应该注意,默认值为WebView.setInitialScale(int)0而不是100。链接到文档
DBX12 2013年

谢谢,它有所帮助。我尝试了5、10、30和70%。在70的情况下,它将大页面的大小调整为70%,因此出现了滚动条。如果是5-30%,则会正常调整页面大小。
CoolMind

7

尝试使用宽视口

 webview.getSettings().setUseWideViewPort(true);

1
谢谢,这似乎是正确的方向。它本身似乎并没有执行任何操作,但是结合使用setInitialScale(50),它可以完美地在人像模式下工作。但是,将手机横向放置时,不适合屏幕显示。除了那一项之外,我还有其他设定要使用吗?这是我目前拥有的:setBuiltInZoomControls(true),setUseWideViewPort(true),setInitialScale(50)。无论屏幕的尺寸或密度如何,我都希望它很好地适合屏幕。再次感谢。
cottonBallPaws


1

我正在为该答案加载图像,并且希望将它们缩放到设备的宽度。我发现,对于版本低于API 19(KitKat)的旧手机,Brian回答的行为并不像我所希望的那样。它在旧手机上的某些图像周围放置了很多空白,但在我的新手机上有效。这是我的替代方案,它得到了以下答案的帮助:Android的WebView可以自动调整大图像的大小吗?布局算法SINGLE_COLUMN已弃用,但它可以工作,我觉得它适合用于较旧的Webview。

WebSettings settings = webView.getSettings();

// Image set to width of device. (Must be done differently for API < 19 (kitkat))
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
    if (!settings.getLayoutAlgorithm().equals(WebSettings.LayoutAlgorithm.SINGLE_COLUMN))
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
} else {
    if (!settings.getLoadWithOverviewMode()) settings.setLoadWithOverviewMode(true);
    if (!settings.getUseWideViewPort()) settings.setUseWideViewPort(true);
}

0

如果您已经确定了Web视图,但是图像仍然超出比例,那么我发现的最佳解决方案(在此处)只是在文档前添加:

<style>img{display: inline; height: auto; max-width: 100%;}</style>

结果,所有图像都会缩放以匹配Web视图的宽度。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.