SpannableString、SpannableStringBuilder、Html字符串
来源:互联网 发布:淘宝提前收款什么意思 编辑:程序博客网 时间:2024/05/22 04:47
前言
如下图,在同一个TextView中显示不同的颜色、大小,有两种方法:设置Span和html字符串
更新
不推荐在代码中使用这种方法来控制显示效果,非常不利于扩展,程序设计的思路应该是界面、逻辑分离。第一次在写layout文件的时候稍微麻烦一点,以后修改、扩展的时候方便得多,java代码简洁、逻辑清晰。
SpannableString、SpannableStringBuilder类概述
SpannableString、SpannableStringBuilder和String都实现了CharSequence接口,都是字符串的载体。不同的是,SpannableString、SpannableStringBuilder还实现了Spannable接口,这个接口中有个setSpan()方法,用来设置字符串的风格(大小、颜色、背景等等),这就是本文要讲的重点。
SpannableStringBuilder比SpannableString多实现了Appendable、Editable等接口,功能更多一些,类似于StringBuilder和String的区别。
setSpan(Object what, int start, int end, int flags)方法
参数1:各种类型的Span,比如控制字体大小的Span、控制字体颜色的Span等等;
参数2:开始应用Span的位置,索引从0开始;
参数3:结束应用Span的位置,并不包括这个位置。比如end为3(即第4个字符),第4个字符不会有效果;
参数4:效果影响的模式,有下面4种;
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。
tips1:setSpan()方法会将设置的Span存入一个数组中,所以各种效果是可以叠加的;
tips2:通过setSpan()方法设置的Span,主要是用于在控件中显示,只有控件才能读取到其中的Span信息,在其它地方,无法读取到其中的Span信息,只能读取到String信息,比如Canvas绘制文字;
各种Span使用
1、字体颜色设置(ForegroundColorSpan)
// 通过String构造SpannableString SpannableString spanString = new SpannableString("同一个TextView显示不同效果"); // 构造ForegroundColorSpan ForegroundColorSpan span = new ForegroundColorSpan(0xfe8026); //将ForegroundColorSpan应用于指定范围的字体spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //设置显示editText.setText(spanString);
2、字体背景颜色(BackgroundColorSpan)
SpannableString spanString = new SpannableString("同一个TextView显示不同效果"); BackgroundColorSpan span = new BackgroundColorSpan(0xfe8026); spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setText(spanString);
3、字体大小(AbsoluteSizeSpan)
SpannableString spanString = new SpannableString("同一个TextView显示不同效果"); // 这里的大小是px值,最好通过dp2px转换一下 AbsoluteSizeSpan span = new AbsoluteSizeSpan(18); spanString.setSpan(span, 2, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE); editText.setText(spanString);
4、粗体、斜体(StyleSpan)
SpannableString spanString = new SpannableString("同一个TextView显示不同效果"); StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC); spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setText(spanString);
5、删除线(StrikethroughSpan)
SpannableString spanString = new SpannableString("同一个TextView显示不同效果"); StrikethroughSpan span = new StrikethroughSpan(); spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setText(spanString);
6、下划线(UnderlineSpan)
SpannableString spanString = new SpannableString("同一个TextView显示不同效果"); UnderlineSpan span = new UnderlineSpan(); spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setText(spanString);
7、图片置换(ImageSpan)
SpannableString spanString = new SpannableString("同一个TextView显示不同效果"); Drawable d = getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); spanString.setSpan(span, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setText(spanString);
html字符串
// 占坑,有空了再更新。。。
- SpannableString、SpannableStringBuilder、Html字符串
- SpannableStringBuilder SpannableString
- SpannableString、SpannableStringBuilder
- Android中五大字符串总结(String、StringBuffer、StringBuilder、SpannableString、SpannableStringBuilder)
- SpannableStringBuilder 和 SpannableString(转)
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- SpannableStringBuilder 和 SpannableString
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- android SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- SpannableString与SpannableStringBuilder
- Qt--QString
- 深入理解java异常处理机制
- Android图像处理之Bitmap类
- selenium上传本地文件
- sql里面EXCEPT、INTERSECT的区别
- SpannableString、SpannableStringBuilder、Html字符串
- Android Studio 的build variants 找不到 test artifact问题
- 怎么用js实现jq的removeClass方法
- Android 项目使用Lambda表达式
- webdriver-webelment接口方法
- ubuntu14.04 2017年1月Samba服务无法访问 网络名不再可用的问题
- nodejs是什么?为什么要学?有什么优缺点?
- 两种自动创建所需要的对象快捷键(myeclipse)
- Facebook f8app 环境搭建以及问题处理