上一篇我们介绍了 OSChina.NET
手机客户端上应用内Web链接的处理
,本篇将介绍如何在 WebView 控件中组装 HTML 显示。
先上张效果图:
由于在 WebView 上显示HTML,不可能只显示纯文本,而没有一点样式,这会显得很难看,下面代码就是定义了一个全局的样式:
public final static String WEB_STYLE = "<style>* {font-size:16px;line-height:20px;} p {color:#333;} a {color:#3E62A6;} img {max-width:310px;} " +
"pre {font-size:9pt;line-height:12pt;font-family:Courier New,Arial;border:1px solid #ddd;border-left:5px solid #6CE26C;background:#f6f6f6;padding:5px;}</style>";
上面全局样式:“*”定义了字体大小以及行高;“p”标签内的字体颜色;“a”标签内的字体颜色;“img”标签的图片最大宽度;“pre”为代码样式;
资讯内容是由服务返回的一串带HTML标签的字符串:
String body = newsDetail.getBody();
相关资讯则是由服务返回的数据组装的:
String strRelative = "";
for(Relative relative : newsDetail.getRelatives()){
strRelative += String.format("<a href='%s' style='text-decoration:none'>%s</a><p/>", relative.url, relative.title);
}
图片处理
WebView上显示图片,不能直接显示大图,这会影响页面的美观以及用户体验,因此要过滤掉原始图片的高宽属性,使用全局的图片样式。同时客户端可以根据用户设置,是否加载图片显示,以达到节省流量的目的。
if(isLoadImage){
//过滤掉 img标签的width,height属性
body = body.replaceAll("(<img[^>]*?)\\s+width\\s*=\\s*\\S+","$1");
body = body.replaceAll("(<img[^>]*?)\\s+height\\s*=\\s*\\S+","$1");
}else{
//过滤掉 img标签
body = body.replaceAll("<\\s*img\\s+([^>]*)\\s*>","");
}
WebView展示HTML
mWebView.loadDataWithBaseURL(null, body, "text/html", "utf-8",null);
完整代码:
//资讯内容
String body = newsDetail.getBody();
if(!body.trim().startsWith("<style>")){
body = WEB_STYLE + body;
}
//相关资讯
if(newsDetail.getRelatives().size() > 0)
{
String strRelative = "";
for(Relative relative : newsDetail.getRelatives()){
strRelative += String.format("<a href='%s' style='text-decoration:none'>%s</a><p/>", relative.url, relative.title);
}
body += String.format("<p/><hr/><b>相关资讯</b><div><p/>%s</div>", strRelative);
}
//读取用户设置:是否加载文章图片
if(isLoadImage){
//过滤掉 img标签的width,height属性
body = body.replaceAll("(<img[^>]*?)\\s+width\\s*=\\s*\\S+","$1");
body = body.replaceAll("(<img[^>]*?)\\s+height\\s*=\\s*\\S+","$1");
}else{
//过滤掉 img标签
body = body.replaceAll("<\\s*img\\s+([^>]*)\\s*>","");
}
mWebView.loadDataWithBaseURL(null, body, "text/html", "utf-8",null);
在WebView上的站内链接的点击处理,请查看上篇应用内Web链接的处理
。
如果大家有什么疑问的话,欢迎在下面回帖一起探讨。
PS:
OSC Android客户端下载地址:
http://www.oschina.net/uploads/osc.apk
OSC iPhone客户端下载地址:
http://www.oschina.net/uploads/osc.ipa
OSC Windows Phone客户端下载地址:
http://www.oschina.net/uploads/osc.xap
转载:http://www.oschina.net/question/157182_59135
分享到:
相关推荐
Gnome-OSC-HS--2-themes,包含Gnome-OSC-HS-(transparent)和Gnome-OSC-HS-(transparent),用于Ubuntu 18.04,仿mac风格,直接放入/usr/share/themes下就可以了使用
官方离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
本文将深入探讨一个名为"osc-placement"的Python库,版本为1.5.0,它被封装在一个名为"osc-placement-1.5.0.tar.gz"的压缩包中。这个库主要用于处理OpenStack中的资源分配和定位问题,对于理解和操作OpenStack环境...
Gnome-OSC-HS--2-themes.tar.xz ubuntu18.04 仿 mac 主题
【标题】"mumu-osc-nicefish-ionic-master_ionic_agou3k_移动端" 指的是一款基于 Ionic 框架开发的移动应用项目,该项目在 "mumu-osc" 开源社区中被创建,并且由 "agou3k" 进行了维护。"nicefish-ionic" 是此项目的...
OSC-2x6-WI-A OSC-2x6-WI-B OSC-2x6-WS OSC-3x8-LI OSC-3x8-WI-A OSC-3x8-WI-B OSC-3x8-WS OSC-3x10-LI OSC-3x10-WI-A OSC-3x10-WI-B OSC-3x10-WS PKM13EPY SW-58010PL-LI SW-58010PL-WI XT-SMT2 XT-SMT3 XT-SMT4 ...
python库。 资源全名:osc-docker-builder-1.7.tar.gz
"mumu-osc-OpenWMS-Frontend-master_back_示范_"这个标题表明这是一个与OpenWMS(开放仓库管理系统)前端相关的项目,可能是某个开发者或团队为了展示后端管理系统的最佳实践而创建的一个备份示例。"back"标签强调了...
在进行数据库维护时,特别是在业务低峰期使用像pt-online-schema-change(pt-osc)这样的工具进行在线DDL操作时,可能会遇到死锁问题,这可能导致业务SQL被回滚,从而影响应用的正常运行。本文将深入探讨pt-osc的...
晶体晶振Altium封装库AD三维视图PCB封装库(2D3D封装库),封装列表如下:Component Count : 38 Component Name ----------------------------------------------- OSC 455E-LI OSC 455E-WI ...OSC-3x10-WS
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
晶体晶振3D封装大全PCB库+原理图库(AD集成库,封装带3D视图),Altium Designer的集成封装库,(SchLib+.PcbLib格式的,带3D视图,非常实用。 Component Count : 38 Component Name ...OSC-3x10-WS
晶振晶体2D3D封装大全(38个) Component Count : 38 Component Name ----------------------------------------------- OSC 455E-LI OSC 455E-WI OSC 1612-4P OSC 2025-4P OSC 3215-2P ...OSC-3x10-WS
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
【标题】"osc-android-app2.0改动一下" 指的是开源中国(Open Source China)的Android应用程序的2.0版本进行了一些更新和优化,以便兼容Android Studio 1.3的Preview 2.0版本。这个过程通常涉及到对源代码的修改、...