ImageSpan 图文混排居中
来源:互联网 发布:excel怎么统计重复数据 编辑:程序博客网 时间:2024/06/04 23:18
文章转载自 : http://blog.csdn.net/a369414641/article/details/69951960;
一. 概述
众所周知,Android图文混排可以通过SpannableString来实现,通过在相应位置使用ImageSpan替换即可,但是使用过的人会发现,imageSpan只提供了两种对齐方式,如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
但是在大多数时候,我们希望实现图片的中点和文字的中点对齐(视觉设计师肯定会给到这样的要求),那么该怎么办呢?
二. 图文混排,图片居中对齐方案
方案1:
一个比较简单解决方案就是让图片和文字的高度保持一致,这样就变相居中对齐了,那么有一些朋友为难了,视觉给的图片的高度比字体的高度小,这肿么办? 这个问题很好解决,让视觉给你切大一点的图片,即在原来的图片上多切一些透明的白边。(是不是恍然大悟?哈哈)
plus:图片比文字高的情况根本不需要居中对齐。
方案2:
程序员肯定有程序员的方案,那就是扩展继承ImageSpan,重写它的onDraw()方法。这个方案本人参考了网上的一些解决方案,但是都有局限性,有些方案只要设置的TextView行间距或者padding就不能正常工作了。
比如,这篇博客:Android ImageSpan使TextView的图文居中对齐
这篇博客的方案,在设置了行间距的时候,就出现问题了。但是这篇博客把字体绘制的原理说的很清楚了,建议大家先读这篇博客,再来理解本人的做法。
代码展示
好了,直接上代码,这是自定义ImageSpan的代码,非常少。主要的原理是把图片绘制在字体的descent线和ascent的中点位置。还是那句话,先看上面那篇博客。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
使用和运行效果
在布局文件里放置一个TextView,设置其行间距。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
activity里的代码如下展示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
运行效果,第二张图片是普通的ImageSpan的效果,这里加入进来是做一个对比。
- ImageSpan 图文混排居中
- Android 解决图文混排,图片和文字居中对齐问题(ImageSpan)
- SpannableString,ImageSpan实现图文混排
- 安卓中的图文混排 ImageSpan SpannableStringBuffer
- TextView图文居中混排
- TextView 图文混排,图文居中对齐
- Android ImageSpan的图文居中对齐
- 单行图文混排垂直居中
- Android ImageSpan使TextView的图文居中对齐
- Android TextView图文混排,图片和文字居中对齐
- VerticalImageSpan,垂直居中的ImageSpan
- Android TextView imageSpan 居中问题
- 图文混排
- 图文混排
- 图文混排
- CSS图文混排
- 图文混排TLFTextField
- 图文混排
- try catch后spring 事物不显式提交
- telnet 使用
- MySQL日期时间函数大全
- MySQL 入门教程
- Libcurl安装及编译
- ImageSpan 图文混排居中
- MYSQL-SHOW VARIABLES 详解
- Sql Server中将日期转换为yyyy-mm格式
- mysql数据库设计
- java练习——计算平均分总成绩
- VLAN
- Android Service完全解析,关于服务你所需知道的一切(下)
- Extjs 中store proxy传值方式
- Spark RDD算子【四】