SPAN 的使用详解

package com.example.spantext;

import android.app.Activity;
import android.graphics.BlurMaskFilter;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.MaskFilterSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
    private TextView tv;
    private Button underline_btn;
    private Button strike_btn;
    private Button style_btn;
    private Button font_btn;
    private Button color_btn1;
    private Button color_btn2;
    private Button url_btn;
    private Button image_btn;
    private Button maskfilte_btn;
    private Button Rasterizer_btn;
    private Button spannablestringbuilder;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) this.findViewById(R.id.tv);
        underline_btn = (Button) this.findViewById(R.id.underline_btn);
        strike_btn = (Button) this.findViewById(R.id.strike_btn);
        style_btn = (Button) this.findViewById(R.id.style_btn);
        font_btn = (Button) this.findViewById(R.id.font_btn);
        color_btn1 = (Button) this.findViewById(R.id.color_btn1);
        color_btn2 = (Button) this.findViewById(R.id.color_btn2);
        url_btn = (Button) this.findViewById(R.id.url_btn);
        image_btn = (Button) this.findViewById(R.id.image_btn);
        maskfilte_btn = (Button) this.findViewById(R.id.maskfilte_btn);
        Rasterizer_btn = (Button) this.findViewById(R.id.Rasterizer_btn);
        spannablestringbuilder = (Button) this.findViewById(R.id.spannablestringbuilder);
 
        underline_btn.setOnClickListener(this);
        strike_btn.setOnClickListener(this);
        style_btn.setOnClickListener(this);
        font_btn.setOnClickListener(this);
        color_btn1.setOnClickListener(this);
        color_btn2.setOnClickListener(this);
        url_btn.setOnClickListener(this);
        image_btn.setOnClickListener(this);
        maskfilte_btn.setOnClickListener(this);
        Rasterizer_btn.setOnClickListener(this);
        spannablestringbuilder.setOnClickListener(this);
 
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.underline_btn:
            addUnderLineSpan();
            break;
        case R.id.strike_btn:
            addStrikeSpan();
            break;
        case R.id.style_btn:
            addStyleSpan();
            break;
        case R.id.font_btn:
            addFontSpan();
            break;
        case R.id.color_btn1:
            addForeColorSpan();
            break;
        case R.id.color_btn2:
            addBackColorSpan();
            break;
        case R.id.url_btn:
            addUrlSpan();
            break;
        case R.id.image_btn:
            addImageSpan();
            break;
        case R.id.maskfilte_btn:
            addmaskfilteSpan();
            break;
        case R.id.Rasterizer_btn:
            addRasterizerSpan();
            break;
        case R.id.spannablestringbuilder:
            addspannablestringbuilderSpan();
            break;
        }
    }
    /**
     * spannablestringbuilder
     */
    private void addspannablestringbuilderSpan() {
        SpannableStringBuilder ss=new SpannableStringBuilder("红色超链接斜体删除线绿色下划线图片:."); 
           //用颜色标记文本
        ss.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, 
                //setSpan时需要指定的 flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括).
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用超链接标记文本
        ss.setSpan(new URLSpan("tel:4155551212"), 2, 5, 
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用样式标记文本(斜体)
        ss.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, 
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用删除线标记文本
        ss.setSpan(new StrikethroughSpan(), 7, 10, 
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用下划线标记文本
        ss.setSpan(new UnderlineSpan(), 10, 16, 
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用颜色标记
        ss.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 12, 
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //获取Drawable资源
        Drawable d = getResources().getDrawable(R.drawable.ic_launcher); 
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        //创建ImageSpan
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
        //用ImageSpan替换文本
        ss.setSpan(span, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
        tv.append("\n");
        tv.setText(ss);
        tv.setMovementMethod(LinkMovementMethod.getInstance()); //实现文本的滚动 
    }
 
    /*
     * Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
     * Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
     * Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
     * Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。
     */
    /**
     * 光栅效果
     */
    private void addRasterizerSpan() {
        SpannableString spanText = new SpannableString("StrikethroughSpan");
        spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.
        SPAN_INCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanText);
         
    }
    /**
     * 修饰效果
     */
    private void addmaskfilteSpan() {
        SpannableString spanText = new SpannableString("benzlocke6666666");
        int length = spanText.length();
        //模糊(BlurMaskFilter)
        MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER));
        spanText.setSpan(maskFilterSpan, 0, length - 10, Spannable.
        SPAN_INCLUSIVE_EXCLUSIVE);
        //浮雕(EmbossMaskFilter)
        maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));
        spanText.setSpan(maskFilterSpan, length - 10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanText);
         
    }
 
    /**
     * 超链接
     */
    private void addUrlSpan() {
        SpannableString spanString = new SpannableString("超链接");
        URLSpan span = new URLSpan("tel:0123456789");
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanString);
         
        tv.setMovementMethod(LinkMovementMethod.getInstance());
    }
 
    /**
     * 文字背景颜色
     */
    private void addBackColorSpan() {
        SpannableString spanString = new SpannableString("文字背景颜色");
        BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
        spanString.setSpan(span, 0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanString);
    }
 
    /**
     * 文字颜色
     */
    private void addForeColorSpan() {
        SpannableString spanString = new SpannableString("文字颜色");
        ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);
        spanString.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanString);
    }
 
    /**
     * 字体大小
     */
    private void addFontSpan() {
        SpannableString spanString = new SpannableString("36号字体");
        AbsoluteSizeSpan span = new AbsoluteSizeSpan(36);
        spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanString);
    }
 
    /**
     * 粗体,斜体
     */
    private void addStyleSpan() {
        SpannableString spanString = new SpannableString("ABCDEF");
        StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanString);
    }
 
    /**
     * 删除线
     */
    private void addStrikeSpan() {
        SpannableString spanString = new SpannableString("删除线");
        StrikethroughSpan span = new StrikethroughSpan();
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanString);
    }
 
    /**
     * 下划线
     */
    private void addUnderLineSpan() {
        SpannableString spanString = new SpannableString("下划线");
        UnderlineSpan span = new UnderlineSpan();
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append("\n");
        tv.append(spanString);
    }
 
    /**
     * 图片
     */
    private void addImageSpan() {
        SpannableString spanString = new SpannableString(" ");
        Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
        spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
      //  tv.append("\n");
        tv.append(spanString);
        
        tv.append("liaoli");
    }
}


<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="horizontal"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.spantext.MainActivity" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text=" " />

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical" >

            <Button
                android:id="@+id/underline_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="underline_btn" />

            <Button
                android:id="@+id/strike_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="strike_btn" />

            <Button
                android:id="@+id/style_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=" style_btn" />

            <Button
                android:id="@+id/font_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="font_btn" />

            <Button
                android:id="@+id/color_btn1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="color_btn1 " />

            <Button
                android:id="@+id/color_btn2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=" color_btn2" />

            <Button
                android:id="@+id/url_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="url_btn" />

            <Button
                android:id="@+id/image_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="image_btn" />

            <Button
                android:id="@+id/maskfilte_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="maskfilte_btn" />

            <Button
                android:id="@+id/Rasterizer_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Rasterizer_btn" />

            <Button
                android:id="@+id/spannablestringbuilder"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="spannablestringbuilder" />
        </LinearLayout>
    </ScrollView>

</LinearLayout>


效果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值