设置webview的最小缩放级别(Android)

设置webview的最小缩放级别(Android),android,webview,zooming,minimum,Android,Webview,Zooming,Minimum,我有一个奇怪的问题,我想用一个网络视图来显示一个图像,并使其可缩放。我的活动中有以下方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_manual); WebView webView = (WebView)findViewById(R.id.webVi

我有一个奇怪的问题,我想用一个网络视图来显示一个图像,并使其可缩放。我的活动中有以下方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_manual);

    WebView webView = (WebView)findViewById(R.id.webView);      
    webView.loadUrl("file:///android_res/drawable/some_image.jpg");
    webView.setInitialScale(getScale());
    webView.getSettings().setBuiltInZoomControls(true);
}
getScale()
方法计算一个可以与
webView.setInitialScale()
一起使用的比例,以将图像精确缩放到全屏宽度,并且可以正常工作。内置缩放控件在某种程度上也可以工作,但:

放大图像后,我无法缩小到初始比例,因为最小比例大于初始比例

使用WebSettings设置缩放密度没有任何帮助,我认为即使在我的手机上设置了,在其他手机上也不会

我还尝试了:我制作了一个HTML页面,其中包含作为body元素唯一子元素的图像。我将它的宽度设置为100%,并以这种方式进行缩放。但是,如果我再次放大,图像会立即调整大小以再次适应屏幕宽度

我找到了一些答案,但没有一个真正有用:

    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setDefaultZoom(ZoomDensity.FAR);
    webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

一个解决方案提到使用反射来更改WebView类以忽略限制,但我担心这可能会破坏我在一些旧版本Android上的应用程序。我必须与API级别为9的设备兼容。

我想我找到了一个解决方案,可以解决大多数情况,只要我们只想加载一个映像。这是一种变通方法,在调整图像大小时会丢失一些图像细节。然而,即使不是所有的设备,它也应该能在大多数设备上工作

我采用了将图像嵌入基本HTML页面的方法,并填充了
属性,该属性无法指向图像文件

  • 在HTML代码中需要标记
    ,并且必须在其
    内容
    属性中包含
    目标密度dpi=device dpi
    。否则,图像的大小可能仍然与视口不匹配


  • 注意:您还可以在
    视口
    标记内指定
    最小比例
    ,这确实影响了我的webview。糟糕的是:至少在我的Galaxy S3 mini运行的Jelly Bean 4.1.2上,小于1.0的
    最小比例
    没有效果。

    我想我找到了一个解决方案,可以解决大多数类似情况,只要我们只想加载一张图像。这是一种变通方法,在调整图像大小时会丢失一些图像细节。然而,即使不是所有的设备,它也应该能在大多数设备上工作

    我采用了将图像嵌入基本HTML页面的方法,并填充了
    属性,该属性无法指向图像文件

  • 在HTML代码中需要标记
    ,并且必须在其
    内容
    属性中包含
    目标密度dpi=device dpi
    。否则,图像的大小可能仍然与视口不匹配


  • 注意:您还可以在
    视口
    标记内指定
    最小比例
    ,这确实影响了我的webview。不好的是:至少在我的Galaxy S3 mini running Jelly Bean 4.1.2上,小于1.0的
    最小刻度
    没有效果。

    可能这就是你正在搜索的

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_manual);
    
        WebView webView = (WebView)findViewById(R.id.webView);
    
        webView.loadDataWithBaseURL("file:///android_res/", generatePage(), "text/html", "utf-8", null);
        webView.getSettings().setBuiltInZoomControls(true);
    }
    

    也许这就是你正在寻找的

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_manual);
    
        WebView webView = (WebView)findViewById(R.id.webView);
    
        webView.loadDataWithBaseURL("file:///android_res/", generatePage(), "text/html", "utf-8", null);
        webView.getSettings().setBuiltInZoomControls(true);
    }
    
    settings.setBuiltInZoomControls(true);
    settings.setSupportZoom(true);
    settings.setUseWideViewPort(true);
    settings.setJavaScriptEnabled(true);
    settings.setJavaScriptCanOpenWindowsAutomatically(true);