android基于XRichText实现图文混编

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值