Textview的样式改变——SpannableString
来源:互联网 发布:严歌苓 知乎 编辑:程序博客网 时间:2024/05/01 03:40
SpannableString、SpannableStringBuilder与String的关系
SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。
SpannableString与SpannableStringBuilder区别
它们的区别在于 SpannableString像一个String一样,构造对象的时候传入一个String,之后再无法更改String的内容,也无法拼接多个 SpannableString;而SpannableStringBuilder则更像是StringBuilder,它可以通过其append()方法来拼接多个String:
SetSpan()
void setSpan (Object what, int start, int end, int flags)
参数说明:
object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。
flags插入新的字符,比如在EditTextView中输入字符的时候
各种Span设置
1 设置字体颜色
String str = "一经注册,表示您同意我们的《用户协议》,点击查看!";SpannableStringBuilder ssBuilder = new SpannableStringBuilder(str);ssBuilder.setSpan(new ForegroundColorSpan(Color.RED),str.indexOf("《"),str.indexOf("》")+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(ssBuilder);
2 设置字体背景颜色
String str = "一经注册,表示您同意我们的《用户协议》,点击查看!";SpannableStringBuilder ssBuilder = new SpannableStringBuilder(str);ssBuilder.setSpan(new BackgroundColorSpan(Color.RED),str.indexOf("《"),str.indexOf("》")+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(ssBuilder);
3 设置字体大小
String str = "一经注册,表示您同意我们的《用户协议》,点击查看!";SpannableStringBuilder ssBuilder = new SpannableStringBuilder(str);ssBuilder.setSpan(new AbsoluteSizeSpan(35),str.indexOf("《"),str.indexOf("》")+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(ssBuilder);
4 粗体
String str = "一经注册,表示您同意我们的《用户协议》,点击查看!";SpannableStringBuilder ssBuilder = new SpannableStringBuilder(str);ssBuilder.setSpan(new StyleSpan(Typeface.BOLD_ITALIC),str.indexOf("《"),str.indexOf("》")+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(ssBuilder);
5 删除线
String str = "一经注册,表示您同意我们的《用户协议》,点击查看!";SpannableStringBuilder ssBuilder = new SpannableStringBuilder(str);ssBuilder.setSpan(new StrikethroughSpan(),str.indexOf("《"),str.indexOf("》")+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(ssBuilder);
6 下划线
String str = "一经注册,表示您同意我们的《用户协议》,点击查看!";SpannableStringBuilder ssBuilder = new SpannableStringBuilder(str);ssBuilder.setSpan(new UnderlineSpan(),str.indexOf("《"),str.indexOf("》")+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(ssBuilder);
7 点击事件
//这个一定要设置tv.setMovementMethod(LinkMovementMethod.getInstance());String str = "一经注册,表示您同意我们的《用户协议》,点击查看!";SpannableStringBuilder ssBuilder = new SpannableStringBuilder(str);ssBuilder.setSpan(new TextClick(),str.indexOf("《"),str.indexOf("》")+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv.setText(ssBuilder);
private class TextClick extends ClickableSpan{ @Override public void onClick(View widget) { Log.i(TAG, "onClick: text"); } }
- Textview的样式改变——SpannableString
- SpannableString--textview显示不同的颜色、样式
- 使用SpannableString 修饰TextView的样式
- Android SpannableString---打造带样式的textview
- TextView—SpannableString的简单用法
- Android TextView SpannableString样式详解
- 通过SpannableString 设置 TextView样式
- SpannableString 给TextView添加不同的显示样式
- Android 使用SpannableString显示不同样式的textview
- 用代码美化你的TextView——SpannableString使用
- TextView 的SpannableString使用
- TextView的SpannableString
- TextView中分段改变文字的样式
- 使用SpannableString设置TextView文字样式
- TextView的高级使用:SpannableString
- TextView-SpannableString(花哨的TextView)
- Android的TextView/EditText使用CharacterStyle&SpannableString来处理图片显示、字体样式、超链接等
- Android的TextView/EditText使用CharacterStyle&SpannableString来处理图片显示、字体样式、超链接等
- 标准C内存函数
- 0113
- Neo4j embedded例子
- Android-RxJava
- C语言:20元喝汽水问题
- Textview的样式改变——SpannableString
- Spine 的纹理打包器(texture packer)
- Android屏幕适配全攻略(最权威的官方适配指导)
- 在Activity里嵌套Fragment
- 寒假篇5-魔法照片
- poj 3352Road Construction(无向强连通分量 tarjan)
- 微信小程序日记——高仿知乎日报
- 欢迎使用CSDN-markdown编辑器
- 8953系列----parse vmlinux