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
原创粉丝点击