Android检测富文本中的<img标签并实现点击效果
本文旨在:通过点击一张图片Toast输出位置与url链接。
闲话少说,实现原理大概是酱紫的::通过正则表达式检测富文本内的图片集合并获取url,在src=“xxx” 后面添加 onclick方法,至于js如何load进去本人是自己拼接了一个html标签的上下文
js调用java方法请自行搜索不在本文讨论范围。
public class HtmlUtils { /**
* 获取html中的所有图片
* @param compatText
* @return
*/
public static List<String> filterImages(String compatText){
List<String> uList = new ArrayList<>();
if(!TextUtils.isEmpty(compatText)&&compatText.contains("<img")){
//get img src
Pattern p = Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>");//<img[^<>]*src=[\'\"]([0-9A-Za-z.\\/]*)[\'\"].(.*?)>");
Matcher m = p.matcher(compatText);
String searchAttrib = "src";
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']http://([^\"|']+)[\"|']";//"=[\"|']([^[\"|']]+)[\"|']";
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
while(m.find()){
Matcher matcherForAttrib = patternForAttrib.matcher(m.group());
if (matcherForAttrib.find()) {
System.out.println("poe " +"http://" +matcherForAttrib.group());
uList.add("http://" +matcherForAttrib.group());
}
}
}
return uList;
} /**
* 1.向富文本中插入执行函数sayHello
* 2.修改后的文本插入<html></html> 组合为新的页面 .
* @param compatText
*/
public static String constructExecActionJs(String compatText){
StringBuffer sb = new StringBuffer();
sb.append("<html> " +
"<script type=\"text/javascript\"> " +
" function showImage(position , url) {\n" +
" window.control.showImage(position,url)\n" +
" }"+
"</script>");
//插入函数
sb.append(insertExecActionJs(compatText));
sb.append("</html>");
return sb.toString();
} public static String insertExecActionJs(String compatText){
String searchAttrib = "src";
String regxpForTag ="<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
Pattern patternForTag = Pattern.compile(regxpForTag);
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']http://([^\"|']+)[\"|']";//"=[\"|']([^[\"|']]+)[\"|']";
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
Matcher matcherForTag = patternForTag.matcher(compatText);
StringBuffer sb = new StringBuffer();
boolean result = matcherForTag.find();
int pos = ;
while (result) {
StringBuffer sbreplace = new StringBuffer();
System.out.println(matcherForTag.group());
Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group()); if (matcherForAttrib.find()) {
System.out.println("ll"+matcherForAttrib.group());
matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"http://"
+ matcherForAttrib.group() +"\""+ " onclick=\"showImage(" +
+pos+"," +
"'http://" +matcherForAttrib.group() +"'"
+")\"");
}
matcherForAttrib.appendTail(sbreplace);
matcherForTag.appendReplacement(sb, sbreplace.toString());
result = matcherForTag.find();
pos++;
}
matcherForTag.appendTail(sb);
System.out.println("poe: "+sb.toString());
return sb.toString();
}
}
Activity中代码如下:
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(),"control");
public class JsInteration {
@JavascriptInterface
public void showImage(int position ,String url) {
Toast.makeText(getApplicationContext(), position+":"+url, Toast.LENGTH_LONG).show();
}
}
调用:
WebViewUtils.setContentToWebView(mWebView,HtmlUtils.constructExecActionJs(blogDetail.getBlogContent()));
Android检测富文本中的<img标签并实现点击效果的更多相关文章
- 去除富文本中的html标签及vue、react、微信小程序中的过滤器
在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容:然后就是过滤器,在微信小程序中使用还是挺多次的,在vue及react中也遇到过 1.富文本去除html标签 去除htm ...
- 从html富文本中提取纯文本
其实从html富文本中提取纯文本很简单,富文本基本上是使用html标签给文本加上丰富多彩的样式. 所以只需要将富文本字符串中的“<.....>”标签剔除,即可得到纯文本.我们可以使用正则表 ...
- Android WebView的HTML中的select标签不起作用
Android WebView的HTML中的select标签不起作用 经过查询资料,了解到android对html里的select标签是弹出一个原生的选择器. 问题: Webview中的select没 ...
- 清除文本中Html的标签
/// <summary> /// 清除文本中Html的标签 /// </summary> /// <param name="Content"> ...
- C# 清除文本中的HTML标签
/// <summary> /// 清除文本中Html的标签 /// </summary> /// <param n ...
- 微信小程序富文本中的图片大小超出屏幕
这个问题我在小程序社区中提的,后来有个帮我回答了这个问题,我试了一下可以. 解决办法是过滤富文本内容,给图片标签添加一个样式,限制图片的最大宽度. replace(/\<img/gi, '& ...
- vue修改富文本中的元素样式
富文本编辑器目前应用很广泛,而有时候我们想要对其中的一些元素的样式进行修改,就会遇到问题. 首先,直接修改是不可行的,因为是用v-html标签进行渲染的,无法直接获取到. 在修改的时候,一般是按标签进 ...
- python去除文本中的HTML标签
def SplitHtmlTag(file): with open(file,"r") as f,open("result.txt","w+" ...
- selenium自动化测试在富文本中输入信息的方法
第一次用selenium+python编写自动测试脚本,因为页面中插入了富文本编辑,开始怎么都无法输入进去,度娘好多方法都无效,分享踩坑的经历一是为了记录一下自己的成长,二是为了给同样摸索seleni ...
随机推荐
- The Largest Clique UVA - 11324( 强连通分量 + dp最长路)
这题 我刚开始想的是 缩点后 求出入度和出度为0 的点 然后统计个数 用总个数 减去 然而 这样是不可以的 画个图就明白了... 如果 减去度为0的点 那么最后如果出现这样的情况是不可 ...
- 温习classList api
有道题是一个removeClass的功能,代码里是正则分隔了传入的name,根据name的个数,循环移除掉,让寻找bug..看了了这几行代码,首先想到的是我会如何去优化. 如果看代码一两分钟就能找到公 ...
- 框架----Django之ModelForm组件
ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...
- Web前端之HTML详解20180327
一.html概述 html就是超文本标记语言的简写,是最基础的网页语言.html通过标签来定义语言,代码都是由标签所组成. 1.html代码从<html>开始</html>结束 ...
- Linux之Json20160705
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易 ...
- dorado事件
//----------------------------------------------------------------------------// //校验实体数据是否填写if(enti ...
- 很好的c++和Python混合编程文章
c++中嵌入python入门1 本人是用vc2003+python2.5学习的,其它的也应该差不了多少 0. 坏境设置把Python的include/libs目录分别加到vc的include/lib ...
- update condition 字段报错
mysql> update tf_user_present set condition="0" where id=1;ERROR 1064 (42000): You have ...
- 分布式监控系统开发【day37】:监控数据如何存储(七)
一.如何存储 二.目录结构 三.代码调用逻辑关系 四.实现代码 1.data_optimization 1.存筛选出来符合条件的数据 def get_data_slice(self,lastest_d ...
- Bootstrap3和Bootsrap4的区别
Bootstrap3和Bootstap4的区别 1.Bootsrap4 css文件减少了40%以上 2.Bootsrap4已经不支持IE8以及IOS 6的支持 3.多了些类好组件