安卓原生开发图文混排显示

来源:互联网 发布:相册视频软件 编辑:程序博客网 时间:2024/06/14 15:00

安卓原生开发图文混排显示

参考:

https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247486770&idx=1&sn=e1d42dfeed6b924512f037967a0b4a6d

http://answerzhao.github.io/2016/06/20/Spannable%E5%AE%9E%E7%8E%B0%E5%AF%8C%E6%96%87%E6%9C%AC/

http://blog.csdn.net/dhyjtt/article/details/53706820

http://blog.csdn.net/dyllove98/article/details/9174261

 

图文混排是经常要遇到的问题,安卓原生已经有了相应的对象做这件事情——spannable。在设置好之后,放入TextView就好了。

图文混排这里我们需要处理的是两类情况:

第一类是String+bitmap形式

第二类是html标签形式

String+bitmap形式

常用方法:

Spannable中定义了抽象方法:

setSpan(Object what, int start, int end, int flags)


what是我们需要设置的span类:


eg:

SpannableString spannableString = new SpannableString("君不见黄河之水天上来,");

spannableString.setSpan(absoluteSizeSpan, 1, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundColorSpan, 1, 5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

 

这里的start和end是我们要操作的文字的坐标。Flags是样式说明操作文字的时候的开闭状况。

Flags的种类:

 

在spnnable中我们可以对图片和文字的样式进行。

显示效果

最终我们的效果可以如图所示。

代码:

基本用法代码

这里展示的是spnnable的基本的用法,包括改变文字、加背景、斜体、粗体等

为文字设置点击事件:

对于可以相应的点击事件的textview,我们一定要加textView10.setMovementMethod(LinkMovementMethod.getInstance());



为文子设置资源标志符:



html形式

对为spannable所支持的html抱歉包括:

<br>,< p>,< div align=>,<strong>, <b>, <em>, <cite>, <dfn>, <i>,<big>, <small>,

 <font size=>,  <font color=>,<blockquote>, <tt>, <a href=>, <u>, <sup>,<sub>, <h1>,<h2>,<h3>,<h4>,<h5>,<h6>,<img src=>, <strike>

作为图文混排来讲,基本上已经满足要求了。

在spannble中,其图片给的是资源链接,所以,我们需要异步下载再去显示,这就比较复杂了。

在加载html中,我们用到的方法是:

Html.fromHtml(source,imageGetter,tagHandler);

l   source,就是包含 HTML 内容的字符串。而 Html.ImageGetter 和Html.TagHandler 是两个接口,提供给开发者继承使用。

l   imageGetter, 如果要显示图片是需要被继承的,重写 getDrawable(String source)方法,用于获取 HTML 里面的图片来显示在 TextView 中。

l   tagHandler,其作用是把 HTML 带标记的文本内容字符串转化成可以显示效果的的 Spanned 字符串 。由于并非所有的 HTML 标签都可以转化,所以在使用时,用户需要自己添加一些必要的标签和处理方法时才会继承使用的。

 

但是因为N以上api有所改变,所以需要分sdk版本进行不同设置。

显示效果:


代码:

这里我们需要重写加载图片方法,从而实现异步的图片加载功能,这里用的是Glide框架加载图片:



git上的地址:https://github.com/huhanghao/TestForMixImgTxt