Android Span 介绍

概要

在安卓开发中,为了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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值