Android WebView,缩放图像以适应屏幕

时间:2012-05-01 08:24:26

标签: android android-webview

我有什么:我正在从网址加载图片。我只是做(WebView).loadUrl(imageurl, extraheaders)

我得到的内容:图片没有以WebView的全宽显示,它周围有空白区域(就像在桌面浏览器中打开一个小小的iamge一样)

我尝试了什么:将LayoutAlgorithm设置为SINGLE_COLUMN。工作完美,但缩放不起作用。 (我在WebView.getSettings()中启用了它不知道为什么。设置setUseWideViewPort(true);加载图像时没有任何空白空间,但它已完全放大。

10 个答案:

答案 0 :(得分:82)

你也可以这样做。

在数据字符串的开头(取决于您的网络数据格式)添加img的CSS样式。

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

要在WebView中快速完成数据,我就这样做了。

WebView content = (WebView) findViewById(R.id.webView1);
content.loadDataWithBaseURL(null, "<style>img{display: inline;height: auto;max-width: 100%;}</style>" + post.getContent(), "text/html", "UTF-8", null);

它非常类似于bansal21ankit所说的,但它可以在HTML中的每个图像上运行而无需额外的工作。


编辑(关于帖子内容的说明):

您可以在示例中使用text/html值而不是post.getContent()

此处发布内容只是text/html内容的一个示例,该内容从某些数据源加载,然后与style部分连接,使得给定内容中的任何图像都适合屏幕。

答案 1 :(得分:43)

我遇到了同样的问题并且做得很好:

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();

String data = "<html><head><title>Example</title><meta name=\"viewport\"\"content=\"width="+width+", initial-scale=0.65 \" /></head>";
data = data + "<body><center><img width=\""+width+"\" src=\""+url+"\" /></center></body></html>";
webView.loadData(data, "text/html", null);

编辑: 由于这仍然是公认的答案,这里有一个更好的解决方案(以下所有归功于Tony):

WebView content = (WebView) findViewById(R.id.webView1);
content.loadDataWithBaseURL(null, "<style>img{display: inline;height: auto;max-width: 100%;}</style>" + post.getContent(), "text/html", "UTF-8", null);

答案 2 :(得分:36)

你应该缩放webView以适应屏幕:

 WebView data = (WebView) getViewById(R.id.webview1);
 data.getSettings().setLoadWithOverviewMode(true);
 data.getSettings().setUseWideViewPort(true);

答案 3 :(得分:6)

对我有用的是:我读到为了适应屏幕的宽度,你应该将它添加到字段内的HTML或xml中:

width="100%"

所以我做的是,而不是缩放和缩放图像,我得到了xml,把它放在StringBuilder中,找到了字段内的src =“https://blablabla.com/image.png”在“src”子字符串之前我插入了“width =”100%“”,然后用StringBuilder设置我的webView,mi代码是这样的:

public void setWebViewWithImageFit(String content){

        // content is the content of the HTML or XML.
        String stringToAdd = "width=\"100%\" ";

        // Create a StringBuilder to insert string in the middle of content.
        StringBuilder sb = new StringBuilder(content);

        int i = 0;
        int cont = 0;

        // Check for the "src" substring, if it exists, take the index where 
        // it appears and insert the stringToAdd there, then increment a counter
        // because the string gets altered and you should sum the length of the inserted substring
        while(i != -1){
            i = content.indexOf("src", i + 1);
            if(i != -1) sb.insert(i + (cont * stringToAdd.length()), stringToAdd );
            ++cont;
        }

        // Set the webView with the StringBuilder: sb.toString()
        WebView detailWebView = (WebView) findViewById(R.id.web_view);
        detailWebView.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null);
}

希望这会有所帮助,我花了几个小时才弄清楚如何解决这个问题。

答案 4 :(得分:5)

它有点晚了,但我希望这会有所帮助,你能做的是:

String html = "<html><body><img src=\"" + URL + "\" width=\"100%\" height=\"100%\"\"/></body></html>";
mWebView.loadData(html, "text/html", null);

这将使图像与WebView的宽度完全相似,其余的可以调整WebView本身。

答案 5 :(得分:4)

代码:

<P>Top 3 Channel 3 Thai actresses:</P>
<ol>
  <li>Yaya Urassaya</li>
  <li>Kimberly Ann Voltemas</li>
  <li>Margie Rasri Balenciaga</li>
</ol>
<div id="idDiv"></div>

答案 6 :(得分:1)

这项工作对我来说: webView = (WebView) findViewById(R.id.webView); WebSettings webSettings = webView.getSettings(); webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

答案 7 :(得分:0)

我认为这会解决您的问题: -

      WebView web;

      web = (WebView) findViewById(R.id.webkit);
      web.setWebViewClient(new Callback());
      web.getSettings().setJavaScriptEnabled(true);
      web.getSettings().setLoadWithOverviewMode(true);
      web.getSettings().setUseWideViewPort(true);
      web.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
      web.setScrollbarFadingEnabled(false);

答案 8 :(得分:0)

本准则适用于我:

String strData = "<head>" + "<style>" + ".smal-video-pnl,.smal-video-thumb,.detail-hldr{margin-left: 0px;margin-right:0px;}" + "</style>" +
            "</head>" + mListItem.get(position).getTitbits();
holder.webViewStatus.loadDataWithBaseURL(null, strData, "text/html", "UTF-8", null);

答案 9 :(得分:0)

@BindingAdapter("wvSetContent")
fun WebView.wvSetContent(content: String?) {
    this.isFocusable = true
    this.isFocusableInTouchMode = true
    this.settings.javaScriptEnabled = true
    this.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY
    this.settings.setRenderPriority(WebSettings.RenderPriority.HIGH)
    this.settings.cacheMode = WebSettings.LOAD_DEFAULT
    this.settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW

    this.settings.domStorageEnabled = true
    this.settings.loadsImagesAutomatically = true;
    this.settings.setAppCacheEnabled(true)
    this.settings.databaseEnabled = true
    this.settings.setSupportMultipleWindows(false)
    this.loadDataWithBaseURL(null,
        "<style>img{display: inline;height: auto;max-width: 100%;}</style>$content", "text/html", "UTF-8", null)
}

它对我有用