Android WebView不遵守缩放百分比

8

我有一个WebView,我想在加载页面时将其缩放到特定的百分比。这个软件的iPhone版本使用HTML meta标签:

<meta name="viewport" content="width=320, initial-scale=0.95, maximum-scale=2.0, user-scalable=1">

由于Android的WebView似乎不遵守该标签,我使用setInitialScale()硬编码了百分比。然而,WebView完全忽略了这个方法调用。无论我放入什么数字,它都显示为100%。
有什么想法吗?
更新:它在模拟器中不起作用,在我的Droid(Motorola)或G1(HTC)上也是如此。

嗨,你正在使用什么安卓设备? - Jorgesys
模拟器、G1、Droid... 在它们任何一个上都无法工作。 - Jeremy Logan
6个回答

5
一些HTC设备在使用WebView时会出现问题,尝试使用以下代码片段!
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

myWebView = new WebView(this);
myWebView.getSettings().setLoadsImagesAutomatically(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.setInitialScale(100);      
try {
   Method m = myWebView.getClass().getMethod("setIsCacheDrawBitmap", boolean.class);
    if (m != null) {
        m.invoke(myWebView, false);
        myWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
    }
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}

myWebView.loadUrl("http://www.stackoverflow.com");

1
我找到了,这是原始链接:http://community.htc.com/na/htc-forums/android/f/91/p/2332/8538.aspx =) - Jorgesys

1
以下代码在我的电脑出现无响应时帮了我一把。值得一试:
mywebview.setWebViewClient(new WebViewClient()); 
mywebview.getSettings().setSupportZoom(true) ; 
mywebview.getSettings().setUseWideViewPort(true) ; 
mywebview.setInitialScale(1) ; 
mywebview.loadUrl(sURL); 

这在我的Android 2.3.6手机上不起作用。为视口设置“initial-scale”仍然没有效果。 - Lars Blumberg

1

你是否为你的 Webview 启用了缩放支持?

    WebSettings webSettings = mywebView.getSettings();
    webSettings.setSupportZoom(true);       

0
可以看到几个选项。
1. 可能您的代码有问题。这是最简单的代码,我可以告诉您它对我有效。内容已缩放。
WebView webview1 = (WebView) findViewById(R.id.webview1);
webview1.setInitialScale(30);
webview1.loadUrl("http://stackoverflow.com");

请发布您的代码。所有与WebView配置相关的代码。 我在模拟器2.2上测试。
2. 可能是您测试的URL有问题。您可以尝试使用 "http://stackoverflow.com" 进行测试,因为我用它测试过,它可以正常缩放。
3. 可能我们使用不同的SDK。您构建的SDK是什么?我的default.properties中的目标是什么?AndroidManifest.xml中的uses-sdk是什么?
这是一个对我来说很好的简单测试 http://open-pim.com/tmp/WebViewTest.zip。您也可以尝试一下。

2
这个方法可行!但在我的应用程序中不起作用。原来是meta viewport标签:initial-scale=1.0; maximum-scale=1.0; 阻止了setInitialScale()的工作。删除它们后,它就可以正常工作了。 - Morgan Christiansson
这个例子在Android 2.3.6上不适用于WebView。Stackoverflow网站无法进行缩放。 - Lars Blumberg

0

meta标签对我有用,如果我使用分号(;)而不是逗号(,)来分隔参数。我过去曾经使用过这种方法:

<meta name="viewport" content="initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />

它有效,在浏览器中至少是这样。我不确定在WebView方面,但值得一试。


';' 对我没有任何作用。 - Jake
这是无效的内容,只允许逗号:https://css-tricks.com/snippets/html/responsive-meta-tag/ - Nuno Silva

0

链接似乎已经失效了。我知道时间有点久远了,但如果你还记得这个问题,能否提供新的链接? - Shivam Pokhriyal

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