SpannableString的使用
来源:互联网 发布:js正则表达式判断字母 编辑:程序博客网 时间:2024/04/30 17:23
TextView是一个安卓开发者最常接触的控件之一了,在这里,我们可以用它来显示一个文本,并对里面的文本进行大小、颜色等的设置操作。但是,这么一个控件对于文字的修饰的些许操作已经满足我们的需求了么?答案肯定是:NO!我们可以打开word,看看它为我们的文本编辑提供了哪些修饰的功能?这些功能我们在安卓中又如何实现呢?现在,来小小的总结这个可以将文本进行多种修饰的类:SpannableString。
SpannableString与String一样,都是一个不可变内容的文本。SpannableString的优势在于,它可以根据不同的需求修改它文本的每一个字符样式,例如每一个字符的前景色,背景色,上标,下标,下划线,是否可点击,是否能复制等等。
SpannableString类为文字设置样式使用的方法就是setSpan(Object what, int start, int end, int flags)方法,只要将这个方法的使用方式弄懂,就可以很好地驾驭SpannableString类了。
setSpan(Object what, int start, int end, int flags)方法总共有四个参数,第一个参数what表示要将文字设置成什么样,可以是前景色、背景色也可以是可点击的文本或者下划线等等,第二个参数start表示将要设置格式的字符的起始下标,第三个参数end表示终止下标,flags属性表示开始于终止下标所代表的的字符是否包含于被设置字符,共有四种属性:【Tip:SPAN后有两个字母,第一个字母表示起始下标,第二个字母表示终止下标;其中INCLUSIVE就表示包含,EXCLUSIVE表示不包含;再进一步其实IN表示包含,EX表示不包含】
Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标,不包括终止下标
Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括起始下标,包括终止下标
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,不包括起始下标,不包括终止下标
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,不包括起始下标,包括终止下标
SpannableString使用四步曲
1、创建SpannableString对象
2、创建为文字设置的样式
3、为SpannableString对象设置样式
4、将带有样式的文字设置于控件
接下来做几个格式设置的小案例,更多的使用请自行查阅API
1、设置前景色ForegroundColorSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); // 创建SpannableString对象 SpannableString spannableString = new SpannableString("设置字符的前景色为蓝色"); // 创建为文字设置的样式 ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.BLUE); // 为SpannableString对象设置样式 spannableString.setSpan(foregroundColorSpan, 9, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); // 将带有样式的文字设置于控件 tv_test.setText(spannableString);
2、设置背景色BackgroundColorSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); // 创建SpannableString对象 SpannableString spannableString = new SpannableString("设置字符的背景色为蓝色"); // 创建为文字设置的样式 BackgroundColorSpan colorSpan = new BackgroundColorSpan(Color.BLUE); // 为SpannableString对象设置样式 spannableString.setSpan(colorSpan, 9, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); // 将带有样式的文字设置于控件 tv_test.setText(spannableString);
【Tip:接下来的代码都如出一辙,就不给注释了】
3、在字符原有大小的基础上设置相对大小RelativeSizeSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("大大大大大"); RelativeSizeSpan sizeSpan1 = new RelativeSizeSpan(1.0f); RelativeSizeSpan sizeSpan2 = new RelativeSizeSpan(1.2f); RelativeSizeSpan sizeSpan3 = new RelativeSizeSpan(1.4f); RelativeSizeSpan sizeSpan4 = new RelativeSizeSpan(1.6f); RelativeSizeSpan sizeSpan5 = new RelativeSizeSpan(1.8f); spannableString.setSpan(sizeSpan1, 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(sizeSpan2, 1, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(sizeSpan3, 2, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(sizeSpan4, 3, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(sizeSpan5, 4, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
4、为字符设置删除线StrikethroughSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为字符设置删除线"); StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); spannableString.setSpan(strikethroughSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
5、为字符设置下划线UnderlineSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为字符设置下划线"); UnderlineSpan underlineSpan = new UnderlineSpan(); spannableString.setSpan(underlineSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
6、为字符设置上标SuperscriptSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为字符设置上标"); SuperscriptSpan superscriptSpan = new SuperscriptSpan(); spannableString.setSpan(superscriptSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
7、为字符设置下标SubscriptSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为字符设置下标"); SubscriptSpan subscriptSpan = new SubscriptSpan(); spannableString.setSpan(subscriptSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
8、为字符设置风格-粗体斜体StyleSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为字符设置粗体、斜体"); StyleSpan styleSpan_BOLD = new StyleSpan(Typeface.BOLD); StyleSpan styleSpan_ITALIC = new StyleSpan(Typeface.ITALIC); spannableString.setSpan(styleSpan_BOLD, 5, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(styleSpan_ITALIC, 8, 10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
9、将文字替换成图片ImageSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("将后面的表情文字替换成表情图片"); Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher); drawable.setBounds(0, 0, 72, 72); ImageSpan imageSpan = new ImageSpan(drawable); spannableString.setSpan(imageSpan, 11, 13, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
10、将字符设置为可点击ClickableSpan
final TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为文字设置点击事件"); ClickableSpan clickableSpan = new ClickableSpan() { // 实现点击事件 @Override public void onClick(View widget) { tv_test.setText("我被点击了!!!"); } // 更多的方法实现点击效果,如删除下划线请参照API使用 @Override public void updateDrawState(TextPaint ds) { // 不显示下划线 ds.setUnderlineText(false); } }; spannableString.setSpan(clickableSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); // 必须写上这一行才有相应的点击事件 tv_test.setMovementMethod(LinkMovementMethod.getInstance()); tv_test.setText(spannableString);
11、为字符设置超链接URLSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为字符设置超链接"); URLSpan urlSpan = new URLSpan("http://www.baidu.com"); spannableString.setSpan(urlSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setMovementMethod(LinkMovementMethod.getInstance()); tv_test.setText(spannableString);
12、为字符设置基于X轴的缩放ScaleXSpan
TextView tv_test = (TextView) findViewById(R.id.tv_test); SpannableString spannableString = new SpannableString("为字符设置基于X轴的缩放"); ScaleXSpan scaleXSpan = new ScaleXSpan(2); spannableString.setSpan(scaleXSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tv_test.setText(spannableString);
我们来小结一下
上面我们总共介绍了12中设置字符样式的API,更多的使用方式和自定义的使用方式,大家可以参考官方API进行使用。
1、设置前景色ForegroundColorSpan
2、设置背景色BackgroundColorSpan
3、在字符原有大小的基础上设置相对大小RelativeSizeSpan
4、为字符设置删除线StrikethroughSpan
5、为字符设置下划线UnderlineSpan
6、为字符设置上标SuperscriptSpan
7、为字符设置下标SubscriptSpan
8、为字符设置风格-粗体斜体StyleSpan
9、将文字替换成图片ImageSpan
10、将字符设置为可点击ClickableSpan
11、为字符设置超链接URLSpan
12、为字符设置基于X轴的缩放ScaleXSpan
- SpannableString 的使用
- SpannableString的使用
- 关于SpannableString的使用
- TextView 的SpannableString使用
- android SpannableString的使用
- SpannableString的使用
- SpannableString的属性使用
- spannableString的使用
- SpannableString的使用
- SpannableString的使用
- Android SpannableString的使用
- TextView的高级使用:SpannableString
- 偷懒的方法-使用SpannableString
- SpannableString和SpannableStringBuilder的使用
- SpannableString的使用及详解
- 使用SpannableString 修饰TextView的样式
- 使用SpannableString实现字体的各种效果
- EditText、ImageSpan和SpannableString的配合使用
- tensorflow lite用于移动电话的神经网络库
- 使用数组模拟邻接表
- oracle数据库操作整理
- Linux 软件安装
- css阴影
- SpannableString的使用
- 5js的输出内容
- Java中打印出来完全相同的两个字符串,用equals方法比较返回的却是false的原因
- 一个匹配URL的正则表达式例子(带详细解释)
- FOJ-2257 Saya的小熊饼干
- leetcode[Assign Cookies]
- ZOJ
- 彻底理解android中的内部存储与外部存储
- CSU