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即可。