在开发应用过程中经常会遇到显示一些不同的字体风格的信息犹如默认的LockScreen上面的时间和充电信息。对于类似的情况,可能第一反应就是用不同的多个TextView来实现,对于每个TextView设置不同的字体风格以满足需求。

这里推荐的做法是使用Android.text.*;和android.text.style.*;下面的组件来实现RichText:也即在同一个TextView中设置不同的字体风格。对于某些应用,比如文本编辑,记事本,彩信,短信等地方,还必须使用这些组件才能达到想到的显示效果。

主要的基本工具类有Android.text.Spanned; android.text.SpannableString; android.text.SpannableStringBuilder;使用这些类来代替常规String。SpannableString和SpannableStringBuilder可以用来设置不同的Span,这些Span便是用于实现Rich Text,比如粗体,斜体,前景色,背景色,字体大小,字体风格等等,android.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 out)

BackgroundColorSpan(int color) ----背景着色,参数是颜色数值,可以直接使用Android.graphics.Typeface里面定义的常量,如Typeface.BOLD,Typeface.ITALIC等等。

StrikethroughSpan----如果设置了此风格,会有一条线从中间穿过所有的字,就像被划掉一样

对于这些Sytle span在使用的时候通常只传上面所说明的构造参数即可,不需要设置其他的属性,如果需要的话,也可以对它们设置其他的属性。

SpannableString和SpannableStringBuilder都有一个设置上述Span的方法:

/**

* Set the style span to Spannable, such as SpannableString or SpannableStringBuilder

* @param what --- the style span, such as StyleSpan

* @param start --- the starting index of characters to which the style span to apply

* @param end --- the ending index of characters to which the style span to apply

* @param flags --- the flag specified to control

*/

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所在的端点

这里理解起来就好像数学中定义区间,开区间还是闭区间一样的。这里要重点说明下关于参数0,有很多时候,如果设置了上述的参数,那么Span会从start应用到Text结尾,而不是在start和end二者之间,这个时候就需要使用Flag 0。

android textview 设置字体,Android TextView设置字体风格相关推荐

  1. Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

    在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及 ...

  2. android设置应用字体大小,在Android应用程序改变的TextView的字体大小从原始设置更改字体大小(Font size...

    我想在我的应用程序指定我自己的文字大小,但我有这样一个问题. 当我在设备设置中更改字体大小,我的应用程序的字体大小TextView也会改变. Answer 1: 其实,设置字体大小只影响大小sp . ...

  3. Android TextView设置部分文字的颜色字体和大小

    目录 一,通过Html实现 1,例如实现如下效果 2,为一段文字中某些字单独设置字体大小 3,设置字体 二,通过Span 相关知识 前言 有时候一个TextView显示很多文字,所有文字颜色,字体,大 ...

  4. android 字体设置方正,Android设置TextView的字体

    做项目的时候,需要使用到手写字体来让内容更加的美观.可是程序中默认使用的是系统的默认字体,怎么将TextView(或EditText)的字体设置成自己想要的字体呢?步骤如下: 下载字体文件(.ttf格 ...

  5. android中弹出消息字体设置,Android如何设置中粗字体——自定义textview

    最近UI出了一版新的UI效果图,里面的标题用的都是中粗字体.这个中粗字体对于ios来说是很容易的,因为ios本省就自带中粗字体,但是对于安卓来说就没那么简单了,因为安卓中的textview只有标准字体 ...

  6. Android如何设置中粗字体——自定义textview

    最近UI出了一版新的UI效果图,里面的标题用的都是中粗字体.这个中粗字体对于ios来说是很容易的,因为ios本省就自带中粗字体,但是对于安卓来说就没那么简单了,因为安卓中的textview只有标准字体 ...

  7. android 实现TextView字体不随系统字体设置变化

    今天工作遇到一个需求,说是要设置textview的字体大小不随系统字体设置变化.于是我一通百度,找到了一个so easy的方法. 1.直接将字体大小的sp改成dp即可实现改需求. 我美滋滋的找来领导, ...

  8. android 调整字体,android设置:调整字体大小

    在手机的设置中,我可以全局更改应用的字体大小.android设置:调整字体大小 设置>显示>字体大小 我可以做的字体大小(小,中,大,非常大),也看过Java和(如果适用).只为我的应用程 ...

  9. android textview 背景图片,Android—TextView 背景颜色与背景图片设置

    Android TextView 背景颜色与背景图片设置,android textview 控件,android textview 背景, android textview 图片,android te ...

  10. android控件字体,android 设置控件的颜色字体的方法

    1.用代码设置控件的颜色: int b =  getResources().getColor(R.drawable.blue);//得到配置文件里的颜色 mButton.setTextColor(b) ...

最新文章

  1. php 单一职责,PHP之单例模式(职责模式)
  2. wxWidgets:拖动一个 wxWindow
  3. C语言编写工资管理系统类似学生管理系统
  4. Hey, everybody!
  5. DataPipeline | PayPal庞姬桦:大数据在小微企业贷款上的运用
  6. jest.conf.js_如何在Jest中正确模拟Moment.js / dates
  7. WCF服务寄宿IIS与Windows服务 - C#/.NET
  8. java 反转jia链表_Java实现单链表反转
  9. 多路径配置udev_多路径multipath配置,udev绑定
  10. 前端系列——jquery.i18n.properties前端国际化解决方案“填坑日记”
  11. 【推荐】2022年AIOT人工智能物联网行业研究报告市场应用分析白皮书(附件中为网盘地址,报告持续更新)
  12. cms,crm名词解释
  13. Flutter上传多张图片
  14. 黑客攻击入门:DNS欺骗、ARP攻击和钓鱼网站制作
  15. python定义一个dog类 类属性有名字毛色体重_全面了解python中的类,对象,方法,属性...
  16. 器械传递的方法_手术器械的传递方法
  17. OpenCV简单实现PhotoShop图层混合
  18. 三星原生android手机,非原生系统??三星Android Go手机曝光
  19. Focal Loss 简介
  20. 一卡难求,什么时候才能买到原价显卡?

热门文章

  1. 大牛告诉你,只有突破程序员思维,才不会沦为码农!
  2. Android开发实践:屏幕旋转的处理
  3. 设计模式(六)命令模式
  4. vector容器的用法
  5. ASP.NET常用加密解密方法
  6. vim中实现CSS、HTML代码自动完成功能
  7. 嵌入式Linux入门经典笔记
  8. SA区坏道数据恢复的经历
  9. Linux图形分区编辑器 GParted Live 1.0 Beta 发布
  10. 成为顶尖机器学习算法专家需要知道哪些算法?