本文主要是介绍Android查缺补漏之SpannableString,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
TextView是Android开发中一种很常用的控件,经常用来展示文字内容。但有的时候为了带来更好的用户体验,往往需要很炫的样式,如果只是通过使用多个TextView进行堆叠未免过于繁琐,因此我们使用SpannableString对于TextView进行设置。
1.普通的TextView
首先我们先来看一看一般的TextView,一般而言,每一个TextView包含一种字体和颜色。
在xml布局中添加一个TextView控件
<TextViewandroid:textSize="25dp"android:id="@+id/text"android:text="http://blog.csdn.net/steveyg"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"/>
然后在Activity中对空间进行绑定
setContentView(R.layout.activity_main);TextView tv = (TextView)findViewById(R.id.text);
最后的样式如下图所示
2.构建SpannableString
当我们希望使用SpannableString设置字符串样式时,一般需要先创建一个SpannableString对象SpannableString spanText = new SpannableString("http://blog.csdn.net/steveyg");
然后调用setSpan方法对于样式进行设置
spanText.setSpan(new BackgroundColorSpan(Color.BLUE), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
我们可以看到这个方法里面共有四个参数,第一个参数是用来指定实现某种效果(比如背景色,超链接等),第二个和第三个参数表示其实的位置和结束的位置,而第四个参数表示实现的类型,可以在Spanned.java中看到全部的类型,常用的有如下四种:
- SPAN_EXCLUSIVE_EXCLUSIVE 不包含起点和终点
- SPAN_EXCLUSIVE_INCLUSIVE 不包含起点但包含终点
- SPAN_INCLUSIVE_EXCLUSIVE 包含起点但不包含终点
- SPAN_INCLUSIVE_INCLUSIVE· 包含起点和终点
3.背景色
使用BackgroundColorSpan可以对背景色进行设置
spanText.setSpan(new BackgroundColorSpan(Color.BLUE), 4, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
4.前景色
使用ForegroundColorSpan可以对前景色进行设置
spanText.setSpan(new ForegroundColorSpan(Color.BLUE) , 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
5.中划线
使用StrikethroughSpan可以实现文字的中划线效果
spanText.setSpan(new StrikethroughSpan(), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
6.下划线
使用UnderlineSpan 可以实现文字的下划线效果
7.设置字号大小
使用AbsoluteSizeSpan可以改变字号的绝对大小,而RelativeSizeSpan 可以改变字体的相对大小(相对当前字号)
spanText.setSpan(new AbsoluteSizeSpan(40, true), 0,4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spanText.setSpan(new RelativeSizeSpan(2.5f), 0,4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
8.设置图片
通过DynamicDrawableSpan或ImageSpan可以将制定位置的字符替换成图片
DynamicDrawableSpan drawableSpan =new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {@Overridepublic Drawable getDrawable() {Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);d.setBounds(0, 0, 50, 50);return d;}};
Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);d.setBounds(0, 0, 50, 50);spanText.setSpan(new ImageSpan(d), 0,1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
9.水平缩放
使用ScaleXSpan可以对字符串进行水平缩放
spanText.setSpan(new ScaleXSpan(2.5f), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
10.改变字体样式
使用StyleSpan可以改变字体样式(斜体、粗体等),样式见Typeface
spanText.setSpan(new StyleSpan(Typeface.ITALIC), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
11.上下角标
使用SubscriptSpan可以实现下角标
spanText.setSpan(new SubscriptSpan(), 0,1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
类似的,可以使用SuperscriptSpan实现上角标
12.修改字体
使用TypefaceSpan可以修改文字字体,如果修改为自定义的字体,需要重写TypefaceSpan
spanText.setSpan(new TypefaceSpan("monospace"), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
13.超链接
使用URLSpan可以实现超链接的效果
spanText.setSpan(new URLSpan("http://blog.csdn.net/steveyg"), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);tv.setText(spanText);tv.setMovementMethod(new LinkMovementMethod());//点击事件
这篇关于Android查缺补漏之SpannableString的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!