Android的WebView可以自动调整巨大的图像?

在一些networking浏览器中,巨大的图像会自动resize以适应屏幕。

是否有可能在Android WebView中做同样的事情?

网页只包含图像,也许增加一些JavaScript可以做到这一点?
有人已经这样做了?

注意:我不知道图像的大小。

是的,这是可能的。 您可以尝试使用下面的代码设置WebView布局。 它将所有图像(大于Device Screen Width )的大小调整为屏幕宽度。 这适用于两种方向(人像和风景)

 webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 

您可以稍后添加额外的边距/填充以获得正确的间距。

 webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 

作品,但已被弃用 。 这是另一个没有LayoutAlgorithm.SINGLE_COLUMN的解决scheme,使用CSS:

 @SuppressLint("NewApi") private openWebView() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.TEXT_AUTOSIZING); } else { webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); } String data = "<div> your HTML content </div>"; webView.loadDataWithBaseURL("file:///android_asset/", getHtmlData(data), "text/html", "utf-8", null); } private String getHtmlData(String bodyHTML) { String head = "<head><style>img{max-width: 100%; width:auto; height: auto;}</style></head>"; return "<html>" + head + "<body>" + bodyHTML + "</body></html>"; } 

您可以让浏览器调整图像大小以适合屏幕的最大宽度:

 <img src="huge-image.jpg" width="100%" /> 

调整其高度到WebView的视口也是可能的:

 <img src="huge-image.jpg" height="100%" /> 

但是,调整宽度和高度都会导致图像拉伸。 要调整宽度或高度取决于哪一方适合最好的,你可以考虑一下JavaScript,像这样:

 <img src="huge-image.jpg" onload="resize(this);" /> <script type="text/javascript"> function resize(image) { var differenceHeight = document.body.clientHeight - image.clientHeight; var differenceWidth = document.body.clientWidth - image.clientWidth; if (differenceHeight < 0) differenceHeight = differenceHeight * -1; if (differenceWidth < 0) differenceWidth = differenceWidth * -1; if (differenceHeight > differenceWidth) { image.style['height'] = document.body.clientHeight + 'px'; } else { image.style['width'] = document.body.clientWidth + 'px'; } // Optional: remove margins or compensate for offset. image.style['margin'] = 0; document.body.style['margin'] = 0; } </script> 

你可以使用这个:

 WebView webView = (WebView) findViewById(R.id.myWebView); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); 

在这里find这个解决scheme: 如何设置webview的初始缩放/宽度

如果您的WebView宽度是fill_parent那么您可以使用此代码:

 Display display=getWindowManager().getDefaultDisplay(); int width=display.getWidth(); String data="<img src='http://example.com/image.jpg' style='width:"+width+"px' />"; webView.loadData(data, "text/html", "utf-8"); 

和缩放还在工作!

同样的方法,如果heightfill_parent

我最喜欢的 :

 String data = "<html><body ><img id=\"resizeImage\" src=\""+PictureURL+"\" width=\"100%\" alt=\"\" align=\"middle\" /></body></html>"; webview.loadData(data, "text/html; charset=UTF-8", null); 

您可以在请求参数中发送所需的大小,并让服务器为您设置img元素的宽度/高度。