我们在开发中,显示信息详情时,一般后台会给出html文本,在android端一般采用webview控件来展示,但是后台给出的html文本一般是给电脑端用的,没有自适配手机,导致手机端图片显示过大,需要左右移动来查看全图。下面给出几种实用方法,达到在手机端用webview展示html中的图片,能自适应手机屏幕展示。

需要用webview控件进行展示html文本,为使文字也自适应手机屏幕大小,需要先对android webview控件的属性进行相应设置,这里bindingView.contentWv代表webview控件。

WebSettings webSettings = bindingView.contentWv.getSettings();//获取webview设置属性
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//把html中的内容放大webview等宽的一列中
webSettings.setJavaScriptEnabled(true);//支持js
webSettings.setBuiltInZoomControls(true); // 显示放大缩小
webSettings.setSupportZoom(true); // 可以缩放

下面介绍三种常用的方法:

方法一:直接替换html文本中img标签下图片大小

如果html中图片没有设置大小,可以采用下面简单方法,设置图片的宽高,但图片可能会变形。

content.replace("<img", "<img height=\"250px\"; width=\"100%\"");

方法二:使用Jsoup查找img标签,替换图片的宽度和高度

实现步骤:

1. 导入jsoup包

compile 'org.jsoup:jsoup:1.10.2'

2. 在代码中添加img标签替换函数

    /*** 将html文本内容中包含img标签的图片,宽度变为屏幕宽度,高度根据宽度比例自适应**/
public static String getNewContent(String htmltext){try {Document doc= Jsoup.parse(htmltext);Elements elements=doc.getElementsByTag("img");for (Element element : elements) {element.attr("width","100%").attr("height","auto");}return doc.toString();} catch (Exception e) {return htmltext;}}

3. 在webview中加载内容时调用替换函数

bindingView.contentWv.loadDataWithBaseURL(null, getNewContent(content), “text/html”, “utf-8”, null);

注意事项,在进行项目混淆时,需要添加‘-keep class org.jsoup.*’这句,否则会报错*

使用此方法,需要引入第三方库,但使用比较简单。

方法三:使用js脚本,重置img标签中图片的宽度和高度

此方法需要使用js,固webview设置属性中一定要添加下面这句

webSettings.setJavaScriptEnabled(true);//支持js

实现步骤:

1. 给webview重新设置WebViewClient

bindingView.contentWv.setWebViewClient(new MyWebViewClient());
bindingView.contentWv.addJavascriptInterface(new JavaScriptInterface(this), "imagelistner");//这个是给图片设置点击监听的,如果你项目需要webview中图片,点击查看大图功能,可以这么添加

2. 重写WebViewClient的onPageFinished方法

private class MyWebViewClient extends WebViewClient {@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);imgReset();//重置webview中img标签的图片大小// html加载完成之后,添加监听图片的点击js函数addImageClickListner();}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}
}/*** 对图片进行重置大小,宽度就是手机屏幕宽度,高度根据宽度比便自动缩放**/
private void imgReset() {bindingView.contentWv.loadUrl("javascript:(function(){" +"var objs = document.getElementsByTagName('img'); " +"for(var i=0;i<objs.length;i++)  " +"{"+ "var img = objs[i];   " +"    img.style.maxWidth = '100%'; img.style.height = 'auto';  " +"}" +"})()");}

如果只需要图片自应手机屏幕大小,现在已经结束了,完成任务了,且在webviewClient中的onPageFinished中也不需要添加addImageClickListner()方法,下面介绍的时点击webview图片查看大图。

3. 点击详情图片查看大图

(1)注入js脚本,设置图片点击函数openImage

private void addImageClickListner() {// 这段js函数的功能就是,遍历所有的img节点,并添加onclick函数,函数的功能是在图片点击的时候调用本地java接口并传递url过去bindingView.contentWv.loadUrl("javascript:(function(){" +"var objs = document.getElementsByTagName(\"img\"); " +"for(var i=0;i<objs.length;i++)  " +"{"+ "    objs[i].onclick=function()  " +"    {  "+ "        window.imagelistner.openImage(this.src);  " +"    }  " +"}" +"})()");}

(2)实现点击事件

public static class JavaScriptInterface {private Context context;public JavaScriptInterface(Context context) {this.context = context;}//点击图片回调方法//必须添加注解,否则无法响应@JavascriptInterfacepublic void openImage(String img) {Log.i("TAG", "响应点击事件!");Intent intent = new Intent();intent.putExtra("image", img);intent.setClass(context, BigImageActivity.class);//BigImageActivity查看大图的类,自己定义就好context.startActivity(intent);}
}

我们来看下实际效果:
下面图1代表是没有进行适配的图片显示效果,可能看到图片没有显示全,需要左右移动才能查看全图:

下面图2代表是适配后的图片显示效果:

可以看出效果还是挺明显的,适配效果很好。

总结

上面三种方法,都能达到webview中图片自适应用手机屏幕大小,但三种方法,笔者更多的是采用第三种方法来实现。使用虽然复杂一些,但是不用引入第三方库,方便控制。

android webview加载html图片自适应手机屏幕大小点击查看大图相关推荐

  1. 安卓 webview加载html图片自适应手机屏幕大小和点击查看大图

    我们在开发中,显示信息详情时,一般后台会给出html文本,在android端一般采用webview控件来展示,但是后台给出的html文本一般是给电脑端用的,没有自适配手机,导致手机端图片显示过大,需要 ...

  2. php显示图片适应手机屏幕,html图片自适应手机屏幕大小的css写法

    复制代码代码如下: body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,select,table,td, ...

  3. 网页图片自适应手机屏幕大小

    JavaScript代码 <script type="text/javascript">//图片自适应$(function () {var imglist = docu ...

  4. html图片自适应手机屏幕大小的css写法

     http://www.bitscn.com/school/HTMLCSS/201412/424685.html 代码如下: body,button,dd,dl,dt,fieldset,form, ...

  5. android webview 自适应屏幕宽度,Android webview加载html自适应屏幕

    最近又写了一篇文章  Android webview加载html代码 上下左右有白边问题 可以参考一下 webView.getSettings().setJavaScriptEnabled(true) ...

  6. android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...

    本文将带你了解Android应用开发Android  WebView加载图片显示过大的处理教程(代码教程),希望本文对大家学Android有所帮助. Webview加载图片时,经常会遇到图片显示不符合 ...

  7. android 双 webview,Android webview加载页面

    释放双眼,带上耳机,听听看~! Android webview加载页面 private WebView webView; public void init() { webView = (WebView ...

  8. android webview 加载本地,webview加载本地资源的各种尝试

    1.webview 打开sd卡上的静态html文件 ,js文件既然放在assets文件夹下能找到,那能通过放在sd卡,能加载吗? 答:事实证明,是没有用的. 2.既然能拿到html的数据,那我们是不是 ...

  9. Android WebView 加载https网页白屏,空白解决方案

    最近在做一个H5相关的需求,使用WebView加载第三方提供的https网页时显示白屏.但是调试打开Baidu和B站的https网址时就能正常打开.被这个问题困扰了半天. 合作方说是android手机 ...

最新文章

  1. tomcat+mysql数据库连接池的操作
  2. 树莓派3B+功耗测试、初体验、图形化配置树莓派3B+配置方法。Raspberry Pi 3B+测评...
  3. 公司内部图书管理界面原型设计图
  4. android xml文件格式,android xml 资源文件中几个格式(@ ? @* @+)的含义
  5. Docker存储驱动之OverlayFS简介
  6. PyTorch 1.0 中文官方教程:在 C++ 中加载 PYTORCH 模型
  7. Effective C++ 笔记(1)让自己习惯c++
  8. 【图像处理】MATLAB:几何变换与图像配准
  9. linux /proc/stat 计算线程cpu,Linux下用/proc/stat文件来计算cpu的利用率(附源码)
  10. c语言习题答案解析,C语言习题及答案1
  11. quartus中与modelsim进行联合仿真出现错误error:(vopt-13130)failed to find design unit****
  12. 如何 gitignore .gitignore
  13. git 仓库分支多文件夹管理
  14. 网络***的基础教程
  15. 爬虫代理和验证码识别
  16. mysql视图 实验报告_数据库实验报告(视图).doc
  17. MTP模式与USB存储模式(MTP in Android)
  18. 面向对象设计的3个基本特征和5个原则
  19. ipad1无法安装应用程序_适用于儿童的31种出色iPad应用程序
  20. windows win7 64位 win7 32位 win10共享打印机提示0x000006cc的解决方法

热门文章

  1. 14本经典商业书籍推荐,经管书籍看这些足够了
  2. 数据库表设计的十四技巧
  3. 个人怎么做微信小程序?个人开发者也可以这样开发属于自己的小程序
  4. 重启postgre_pgsql如何重启
  5. android 游戏 实战打飞机游戏 菜单页面(1)
  6. vue3和vue2的区别并且如何升级 (对于vue2有基础的)
  7. vue2和vue3的混入
  8. Android通过包名启动应用微信qq淘宝
  9. 记账就使用电子记账本 用电脑记录安全放心
  10. windows server : windows server backup 服务(自动定时备份,一次备份,恢复),安装搭建恢复(图形化)