概要
在安卓开发中,为了UI的美观,通常遇到UI设计会将一堆文字中的部分关键字突出显示,如下图。如果我们采用四个TextView来实现这种效果,确实能够完成,但是势必为对性能有一定的影响,我们完全可以通过一个TextView再借用Android提供的Span类来完成相同的效果。
Android Span 框架
Android Span 中主要有四大接口,分别为CharacterStyle、ParagraphStyle、UpdateAppearance、UpdateLayout。
CharacterStyle: 主要控制字符层次上的文字格式;
ParagraphStyle:主要控制段落层次上的文字格式;
UpdateAppearance:主要控制字符层次上的文字外观;
UpdateLayout: 主要控制字符层次上的度量或者尺寸;
Android提供了大量具体实现类,我们在使用的时候只需要利用具体实现类即可完成所需。
CharacterStyle 实现类主要有:
UpdateAppearance 实现类主要有:
其他连个接口可以通过AS自行查找,不在截图。
关于具体的细节使用可以参考下面这篇文档:
Android中各种Span的用法
案例
下面通过代码实现文档开始介绍的效果,效果如下:
首先看activity的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.androidqunyinhui.android.TextSpanTestActivity">
<TextView
android:id="@+id/tv_text_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textSize="15sp"
android:textColor="#cccccc"/>
</LinearLayout>
具体代码实现:
private void testSpan(){
TextView tvInfo = (TextView) findViewById(R.id.tv_text_1);
String text = "超越\n90%竞争者";
SpannableStringBuilder ssb = new SpannableStringBuilder(text);
// 设置文字相对大小,指相对于文本设定的大小的相对比例。
ssb.setSpan(new RelativeSizeSpan(2.0f), 2, text.length()-4, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
ssb.setSpan(new RelativeSizeSpan(1.2f), text.length()-4, text.length()-3, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
// 设置文字颜色。
ssb.setSpan(new ForegroundColorSpan(Color.BLUE), 2, text.length()-3, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
tvInfo.setText(ssb);
}
通过如上的简单代码,即可。
参考文档
http://blog.csdn.net/u012422440/article/details/52133037
http://blog.csdn.net/qq_16430735/article/details/50427978