Spannable支持字符串展示的多样式

来源:互联网 发布:骆驼趾 知乎 编辑:程序博客网 时间:2024/05/22 23:58

一、Spannable的使用

1,修改字体颜色

    /**     * 第一种设置方式     *     * @param tv     */    private void changeStyle1(TextView tv) {        Spannable helloWorld = new SpannableString("我才知道Spannable可实现String的多样式展示内容");//        helloWorld.setSpan(new ForegroundColorSpan(Color.BLUE), 2, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);        helloWorld.setSpan(new ForegroundColorSpan(Color.BLUE), 2, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        tv.setText(helloWorld);    }

2,修改字体大小

    /**     * 第二种设置方式     *     * @param tv     */    private void changeStyle2(TextView tv) {        Spannable congFu = new SpannableString("天下武功,无奇不破,唯快不破!");        congFu.setSpan(new AbsoluteSizeSpan(26), 0, 4, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);        congFu.setSpan(new AbsoluteSizeSpan(36), 5, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);        tv.setText(congFu);    }
3,样式设置

【样式】

    <style name="style1">        <item name="android:textSize">10sp</item>        <item name="android:textColor">#00FFFF</item>        <item name="android:textStyle">italic</item>    </style>    <style name="style2">        <item name="android:textSize">10sp</item>        <item name="android:textColor">@color/green</item>        <item name="android:textStyle">bold</item>    </style>
【使用】

    /**     * 第三种设置方式     *     * @param tv     */    private void changeStyle3(TextView tv) {        Spannable renSheng = new SpannableString("生容易,活容易,生活,不容易!");//左右开闭原则        renSheng.setSpan(new TextAppearanceSpan(this, R.style.style1), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//两边打开        renSheng.setSpan(new TextAppearanceSpan(this, R.style.style2), 4, 7, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);//左边不包括,右边包括,","不包括在内        renSheng.setSpan(new TextAppearanceSpan(this, R.style.style1), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        renSheng.setSpan(new TextAppearanceSpan(this, R.style.style2), 11, 14, Spanned.SPAN_INCLUSIVE_INCLUSIVE);        tv.setText(renSheng);    }
展示效果:


二、细节区分

1,接口定义

【Spanned】

该接口定义了很多Flag变量,注意以下几个常用的flag标记,用来标记范围

     SPAN_INCLUSIVE_EXCLUSIVE     SPAN_INCLUSIVE_INCLUSIVE     SPAN_EXCLUSIVE_EXCLUSIVE     SPAN_EXCLUSIVE_INCLUSIVE
主要的几个接口,都是用来获取标记范围参数的:
     public int getSpanStart(Object tag);     public int getSpanEnd(Object tag);     public int getSpanFlags(Object tag);     public <T> T[] getSpans(int start, int end, Class<T> type);

【Spannable】

该接口继承自Spanned,包含2个接口方法,和一个工厂类。

     public void setSpan(Object what, int start, int end, int flags);     public void removeSpan(Object what);

2,主要方法

setSpan(Object what, int start, int end, int flags);

     start:起始位置,inclusive     end:结束位置,exclusive,最终起效果的字符长度为 end-start     flags:其主要含义为标识在Span范围内的文本前后输入新的字符时,是否把它们也应用于这个效果。
示例:

     SPAN_INCLUSIVE_INCLUSIVE效果:     <u>Click</u> here to see more.       //原始应用效果,在Click下面会有下划线     <u>aClick</u> here to see more.     //在Click之前输入一个字符a,则a也会有下划线      <u>aClicka</u> here to see more.   //在Click之后输入一个字符a,a也有下划线        SPAN_INCLUSIVE_EXCLUSIVE效果:     <u>Click</u> here to see more.     <u>aClick</u> here to see more.     <u>aClick</u>a here to see more.     //在Click之后输入一个字符a,a并没有下划线

<span style="color:#ff0000;">SPAN_EXCLUSIVE_EXCLUSIVE  不包括前面,不包括后面SPAN_EXCLUSIVE_INCLUSIVE  不包括前面,包括后面SPAN_INCLUSIVE_EXCLUSIVE  包括前面,不包括后面SPAN_INCLUSIVE_INCLUSIVE  包括前面,包括后面</span>

富文本编辑源码下载


如果没有人看着我,我该多快乐。

---  世界是自己的,与其他人无关。

---  真正的束缚因素 !

----  超越自己 ~_~


0 0
原创粉丝点击