为什么缩小缩放在我的Android WebView中不起作用?

时间:2014-12-01 20:27:26

标签: android android-webview

我的活动布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <include  layout="@layout/window_title" />

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true" 
        android:layout_below="@+id/linear_layout"/>

</RelativeLayout>

以下是我如何配置它:

    // Enable JavaScript.
    WebView myWebView = (WebView) findViewById(R.id.webView);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    // Settings so page loads zoomed-out all the way.
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setBuiltInZoomControls(true);

以下是我的清单文件中的版本设置:

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="17" />

我正在尝试在WebView中加载此页面:

https://new.livestream.com/lcboise

页面加载得很好,但我不能捏缩放。我尝试了不同的WebView设置组合(上面,包括未列出的其他组合),但它不会缩放。

观察:

1)在EXACT相同的WebView中加载我正在使用的不同页面(https://lcboise.infellowship.com/UserLogin)允许我缩放。

2)我的主要测试设备,无法正常工作,是运行Android的v4.4.3的HTC One。

3)我可以在我正在使用运行Android的v2.3.3的旧测试设备上加载和缩放直播页面。

页面本身是否有可能破坏HTC One上运行的WebView?如果是这样,任何猜测可能会这样做?

更新[解决方案]:

以下是我必须添加到WebView以使缩放变为可以工作的内容:

    myWebView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url) {
            String javascript="javascript:document.getElementsByName('viewport')[0].setAttribute('content', 'initial-scale=1.0,maximum-scale=10.0');";
            view.loadUrl(javascript);
        }
    });

7 个答案:

答案 0 :(得分:11)

这是您链接的页面具有以下视口元标记:

<meta name="viewport" content="width=1024, maximum-scale=1.0, target-densitydpi=device-dpi">

有效的页面具有不同的视口元标记。 maximum-scale位告诉WebView不允许放大超过指定的数量。

该网站也应该在任何现代移动浏览器中被破解。将最大规模设置为较低的值,因为它不是非常适合移动设备和#34;所以它可能只是网站上的一个错误。您是否尝试过与所有者联系,也许他们可以在服务器端修复它?

在WebView中,您无法做很多事情,不会导致其他网站呈现错误。您可以尝试注入JS以changing the meta tag作为最后的手段修复页面。

答案 1 :(得分:4)

你有没有尝试过这个建议?

webSettings.setSupportZoom(true);

请参阅Disable pinch zoom in WebView?

请注意,链接是关于禁用缩放的。但是,默认情况下,您的缩放可能会被某些用户建议禁用。

答案 2 :(得分:4)

添加这两行以启用缩放以放大webview

webview.getSettings().setSupportZoom(true);
webview.getSettings().setBuiltInZoomControls(true);

答案 3 :(得分:1)

缩放:

webSettings.getSettings().setBuiltInZoomControls(true);

禁用:

webSettings.getSettings().setBuiltInZoomControls(false);

答案 4 :(得分:0)

wv.getSettings()setBuiltInZoomControls(真)。 wv.getSettings()setDisplayZoomControls(假);

为我完美地工作。

答案 5 :(得分:0)

在我的问题上,由于视口限制,我成功完成了上述js注入。 onPageFinished 不适用于我的情况,但是 onLoadResource 可以解决问题。

@Override
public void onLoadResource(WebView view, String url) {
    view.loadUrl("javascript:document.getElementsByName(\"viewport\")[0].setAttribute(\"content\", \"width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes\");");
    super.onLoadResource(view, url);
}

答案 6 :(得分:0)

要允许在 Android WebView 上进行缩放,唯一需要的设置是:

  1. webView.getSettings().setBuiltInZoomControls(true);
  2. webView.getSettings().setDisplayZoomControls(false);
  3. 确保 HTML 标头 viewport 具有正确的值;
  4. 如果您在加载后更改设置,请确保从 UIThread 调用