android基于XRichText实现图文混编
来源:互联网 发布:网络销售的职位描述 编辑:程序博客网 时间:2024/05/20 14:23
https://github.com/sendtion/XRichText
实例如下:
先说坑:
1.首先由于xritchtext在调用相册选取图片会在xritch内部实现一个图片的缓存,所以在通过其自定义的方法拿到数据的时候,图片的路径是xritch自己缓存的路径。但是这里保存的并不是一个.png之类的图片格式,而是一个”-“结尾的文件,所以,为了使用方便先去更改其缓存的文件名称,修改如下:
String imagePath = SDCardUtil.saveToSdCard(bitmap)找到这个方法,修改该方法体
/** * 图片保存到SD卡 * @param bitmap * @return */public static String saveToSdCard(Bitmap bitmap) {String imageUrl = getPictureDir() + System.currentTimeMillis() + ".png";File file = new File(imageUrl);try {FileOutputStream out = new FileOutputStream(file);if (bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)) {out.flush();out.close();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return file.getAbsolutePath();}这样修改后,获取的数据如下:
E/活动详情,内容,修改后: <img src='/storage/emulated/0/XRichText/1491449034679.jpg'/>这样我们就可以使用该地址进行图片的上传,然后得到需要的网络地址,然后进行替换。这还有一个坑就是String.replace();方法,直接调用该方法后并不是直接修改原string的数据,需要用一个新的String来接收该数据,重新接收的数据才是替换后的数据。
2.这里我们的对于数据的保存的解析使用其demo自带的方法,在实际使用过程中由于一些原因,需要更改一些内容,如下:
对于html的格式,xritchtext默认是识别<img src=""/>该种类型的html文件,如果需要改成<img src=''/>,则需要去修改它进行数据分割时的正则表达式,该方法在:
List<String> textList = StringUtils.cutStringByImgTag(html);
找到该方法,修改如下:
/** * @param targetStr 要处理的字符串 * @description 切割字符串,将文本和img标签碎片化,如"ab<img>cd"转换为"ab"、"<img>"、"cd" */ public static List<String> cutStringByImgTag(String targetStr) { List<String> splitTextList = new ArrayList<String>(); Pattern pattern = Pattern.compile("<img.*?src=\\\'(.*?)\\\'.*?>"); Matcher matcher = pattern.matcher(targetStr); int lastIndex = 0; while (matcher.find()) { if (matcher.start() > lastIndex) { splitTextList.add(targetStr.substring(lastIndex, matcher.start())); } splitTextList.add(targetStr.substring(matcher.start(), matcher.end())); lastIndex = matcher.end(); } if (lastIndex != targetStr.length()) { splitTextList.add(targetStr.substring(lastIndex, targetStr.length())); } return splitTextList; }
只是将这里的”“换成‘’,就OK。
对于插入图片,生成html,这里当然也需要把src="",转化为src='',修改如下:
private String getEditData() { List<RichTextEditor.EditData> editList = editDetail.buildEditData(); StringBuffer content = new StringBuffer(); for (RichTextEditor.EditData itemData : editList) { if (itemData.inputStr != null) { content.append(itemData.inputStr); } else if (itemData.imagePath != null) { content.append("<img src='").append(itemData.imagePath).append("'/>"); } } return content.toString(); }
解析时候的第二个坑,其自带的方法会去xritchtext文件夹中去查找html数据中的图片,所以在从服务器拉去图片,然后保存本地的时候,必须保存在:
// 首先保存图片 File appDir = new File(Environment.getExternalStorageDirectory(), "XRichText"); if (!appDir.exists()) {
至于如何调用和使用,查看github即可。
1 1
- android基于XRichText实现图文混编
- Android聊天实现图文混编(包括gif显示)
- 实现简单的图文混编
- Android富文本编辑器:XRichText
- 图文混编
- Android TextView图文混编之Html.formHtml()
- 图文混编效果
- iOS图文混编
- 表情,文字 图文混编
- iOS开发 图文混编
- 微信小程序图文混编
- 【Android实战】----基于Retrofit实现多图片/文件、图文上传
- 【Android实战】----基于Retrofit实现多图片/文件、图文上传
- 【Android实战】----基于Retrofit实现多图片/文件、图文上传
- android 富文本编辑框/android XRichText删除图片
- android 混编JsBridge的原理和实现
- android 混编
- 利用NSAttributeString进行图文混编
- EMC单片机学习四
- 查询死锁 和 解决死锁
- oracle中易混淆的概念
- RecyclerView列表数据刷新
- C++实验四-年龄几何
- android基于XRichText实现图文混编
- APP安全报告第十五期:音乐APP的安全性极低,用户信息存在泄露风险!
- asp.net点击按钮先弹出正在加载
- C语言经典100题:5
- PHP中static关键字以及与self关键字的区别
- Mysql错误:The server time zone value is unrecognized or represents more than one time zone
- Visual Studio2010--命令行编译C/C++
- 不仅仅是写代码,而是完成作品
- smartgit使用之一---合并分支