android⽂本字体设置,Android:TextView设置字体风格(⽂本
应该通⽤)
在开发应⽤过程中经常会遇到显⽰⼀些不同的字体风格的信息犹如默认的LockScreen上⾯的时间和充电信息。对于类似的情况,可能第⼀反应就是⽤不同的多个TextView来实现,对于每个TextView设置不同的字体风格以满⾜需求。
这⾥推荐的做法是使⽤*;和style.*;下⾯的组件来实现RichText:也即在同⼀
个TextView中设置不同的字体风格。对于某些应⽤,⽐如⽂本编辑,记事本,彩信,短信等地⽅,还必须使⽤这些组件才能达到想到的显⽰效果。
主要的基本⼯具类有Spanned; SpannableString;
SpannableStringBuilder可以⽤来设置不同的Span,这些Span便是⽤于实现Rich
Text,⽐如粗体,斜体,前景⾊,背景⾊,字体⼤⼩,字体风格等等,style.*中定义了很多的Span类型可供使⽤。
这是相关的API的Class General
Hierarchy:
因为Spannable等最终都实现了CharSequence接⼝,所以可以直接把SpannableString和SpannableStringBuilder通过
TextView.setText()设置给TextView。
使⽤⽅法
当要显⽰Rich
Text信息的时候,可以使⽤创建⼀个SpannableString或SpannableStringBuilder,它们的区别在于
SpannableString像⼀个String⼀样,构造对象的时候传⼊⼀个String,之后再⽆法更改String的内容,也⽆法拼接多个
SpannableString;⽽SpannableStringBuilder则更像是StringBuilder,它可以通过其append()⽅
法来拼接多个String:
SpannableString word = new
SpannableString("The quick fox jumps over the lazy
dog"); SpannableStringBuilder multiWord = new
SpannableStringBuilder(); multiWord.append("The Quick Fox"); multiWord.append("jumps over"); multiWord.append("the lazy dog");
创建完Spannable对象后,就可以为它们设置Span来实现想要的Rich Text了,常见的Span有:
AbsoluteSizeSpan(int size) ----
设置字体⼤⼩,参数是绝对数值,相当于Word中的字体⼤⼩
RelativeSizeSpan(float proportion) ----
设置字体⼤⼩,参数是相对于默认字体⼤⼩的倍数,⽐如默认字体⼤⼩是x,
那么设置后的字体⼤⼩就是x*proportion,这个⽤起来⽐较灵活,proportion>1就是放⼤(zoom
in), proportion<1就是缩⼩(zoom out)
ScaleXSpan(float proportion) ----
缩放字体,与上⾯的类似,默认为1,设置后就是原来的乘以proportion,⼤于1时放⼤(zoon in),⼩于时缩⼩(zoom
BackgroundColorSpan(int color)
----背景着⾊,参数是颜⾊数值,可以直接使⽤aphics.Color⾥⾯定义的常量,或是⽤b(int,
int, int)
ForegroundColorSpan(int color) ----前景着⾊,也就是字的着⾊,参数与背景着⾊⼀致
TypefaceSpan(String family) ----字体,参数是字体的名字⽐如“sans",
textstyle"sans-serif"等
StyleSpan(Typeface style)
-----字体风格,⽐如粗体,斜体,参数是aphics.Typeface⾥⾯定义的常量,如Typeface.BO
LD,Typeface.ITALIC等等。
StrikethroughSpan----如果设置了此风格,会有⼀条线从中间穿过所有的字,就像被划掉⼀样
对于这些Sytle
span在使⽤的时候通常只传上⾯所说明的构造参数即可,不需要设置其他的属性,如果需要的话,也可以对它们设置其他的属性。
SpannableString和SpannableStringBuilder都有⼀个设置上述Span的⽅法:
setSpan(Object what, int start, int end, int
flags);
其中参数what是要设置的Style
span,start和end则是标识String中Span的起始位置,⽽
flags是⽤于控制⾏为的,通常设置为0或Spanned中定义的常量,常⽤的有:
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
--- 不包含两端start和end所在的端点
Spanned.SPAN_EXCLUSIVE_INCLUSIVE
--- 不包含端start,但包含end所在的端点
Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含两端start,但不包含end所在的端点
Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含两端start和end所在的端点
如:
SpannableString mDoctorName = new
(position).getHospitalName());
mDoctorName.setSpan(new
StyleSpan(Typeface.BOLD), 0, mDoctorName.length(), 0);
[
如⽂本中带有中⽂,似乎直接写上⾯的代码不好⽤,只能变化英⽂字符和数字;加android:typeface="monospace"属性后即可将中⽂同样变化
]
这⾥理解起来就好像数学中定义区间,开区间还是闭区间⼀样的。这⾥要重点说明下关于参数0,有很多时候,如果设置了上述的参数,那么Span会从start应⽤到Text结尾,⽽不是在start和end⼆者之间,这个时候就需要使⽤Flag
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论