1. 程式人生 > >Android 開發SpannableString和SpannableStringBuilder的使用詳解

Android 開發SpannableString和SpannableStringBuilder的使用詳解

1.SpannableString與SpannableStringBuilder簡介

SpannableStringBuilder,SpannableString其實和String一樣,都是一種字串型別。不同的是SpannableString可以通過使用其方法setSpan方法實現字串各種形式風格的顯示。比如在原來String上加下劃線、加背景色、改變字型顏色、用圖片把指定的文字給替換掉,總之,SpannableString、SpannableStringBuilder與String一樣,可以認為是String的升級版。SpannableString與SpannableStringBuilder區別就比如String和StringBuilder一樣。

2.setSpan()

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

object what :對應的各種Span,後面會提到;

int start:開始應用指定Span的位置,索引從0開始

int end:結束應用指定Span的位置,不包含

int flags

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前後都不包括(在標誌位【start,end)前後新增文字,新新增的文字不會有任何設定的屬性)

Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,後面包括。(在標誌位【start,end)前新增文字,新新增的文字不會有任何設定的屬性,後邊的新增的文字會帶有設定的what屬性)

Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,後面不包括。(在標誌位【start,end)後新增文字,新新增的文字不會有任何設定的屬性,前邊邊的新增的文字會帶有設定的what屬性)

Spannable.SPAN_INCLUSIVE_INCLUSIVE :前後都包括。前後都不包括(在標誌位【start,end)前後新增文字,新新增的文字會有設定的屬性)

3.object what 各種設定

3.1字型顏色(ForegroundColorSpan)

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    ForegroundColorSpan foregroundColorSpan=new ForegroundColorSpan(Color.parseColor("#FF4040"));
    stringBuilder.setSpan(foregroundColorSpan,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.2背景顏色(BackgroundColorSpan)

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    //背景顏色
    BackgroundColorSpan backgroundColorSpan=new BackgroundColorSpan(Color.parseColor("#FF4040"));

    stringBuilder.setSpan(backgroundColorSpan,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.3文字可點選,有點選事件(ClickableSpan)

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);


    ClickableSpan clickableSpan=new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            Toast.makeText(MainActivity.this,"可點選",Toast.LENGTH_LONG).show();
        }
        @Override
        public void updateDrawState(TextPaint ds) {
            //去掉可點選文字的下劃線
            ds.setUnderlineText(false);
        }
    };

    //文字可點選,有點選事件
    stringBuilder.setSpan(clickableSpan,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 設定此方法後,點選事件才能生效
    textView.setMovementMethod(LinkMovementMethod.getInstance());
    textView.setText(stringBuilder);

3.4 模糊效果(BlurMaskFilter)

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);


    MaskFilter filter=new BlurMaskFilter(4.0f,BlurMaskFilter.Blur.OUTER);
    MaskFilterSpan maskFilterSpan=new MaskFilterSpan(filter);

    stringBuilder.setSpan(maskFilterSpan,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    textView.setText(stringBuilder);

3.5 刪除線效果 (StrikethroughSpan)

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);

    stringBuilder.setSpan(new StrikethroughSpan(),0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    textView.setMovementMethod(LinkMovementMethod.getInstance());
    textView.setText(stringBuilder);

3.6 下劃線效果(UnderlineSpan)

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);


    UnderlineSpan un=new UnderlineSpan();
    //下劃線效果
    stringBuilder.setSpan(un,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    textView.setText(stringBuilder);

3.7 字型絕對大小效果(AbsoluteSizeSpan)

     String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    AbsoluteSizeSpan  ab=new AbsoluteSizeSpan(30,true);
    //文字字型絕對的大小
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.8 設定圖片(DynamicDrawableSpan)基於底部

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    DynamicDrawableSpan ab=new DynamicDrawableSpan() {
        @Override
        public Drawable getDrawable() {
            Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
            drawable.setBounds(0,0,50,50);
            return drawable;
        }
    };
    //文字字型絕對的大小
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.9 設定圖片(ImageSpan )

     String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher_round);
    drawable.setBounds(0,0,100,100);
    ImageSpan ab=new ImageSpan(drawable);
    //文字字型絕對的大小
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.10 相對字型大小(RelativeSizeSpan )

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);

    RelativeSizeSpan ab=new RelativeSizeSpan(3.0f);
    //文字字型絕對的大小
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.10 基於X的縮放(ScaleXSpan )

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    ScaleXSpan ab=new ScaleXSpan(3.0f);
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.11 字型樣式:粗體、斜體等(StyleSpan )

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    StyleSpan ab=new StyleSpan(Typeface.BOLD_ITALIC);
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.12 上標(SubscriptSpan )

    String content="22的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    SuperscriptSpan ab=new SuperscriptSpan();
    stringBuilder.setSpan(ab,1,2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.12 字型、大小、樣式和顏色(TextAppearanceSpan)

     String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    //自定義文字樣式
    TextAppearanceSpan ab=new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium);
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.13 文字字型(TypefaceSpan )

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    //文字字型
    TypefaceSpan ab=new TypefaceSpan ("serif");
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringBuilder);

3.13 文字超連結(URLSpan )

    String content="預祝黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    //文字字型
    URLSpan ab=new URLSpan  ("http://www.baidu.com");
    stringBuilder.setSpan(ab,0,3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setMovementMethod(new LinkMovementMethod());
    textView.setText(stringBuilder);

3.14 下標(SubscriptSpan )

    String content="log10黨的十九大完美謝慕";
    SpannableStringBuilder stringBuilder=new SpannableStringBuilder(content);
    SubscriptSpan ab=new SubscriptSpan();
    stringBuilder.setSpan(ab,3,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setMovementMethod(new LinkMovementMethod());
    textView.setText(stringBuilder);

相關推薦

Android 開發SpannableStringSpannableStringBuilder的使用

1.SpannableString與SpannableStringBuilder簡介 SpannableStringBuilder,SpannableString其實和String一樣,都是一種字串型別。不同的是SpannableString可以通過使用其

android開發 -- 檢視陰影 (Material Design)

Material Design包含了很多內容,大致把它分為四部分: 主題和佈局——ANDROID L——Material Design詳解(主題和佈局) 檢視和陰影——ANDROID L——Material Design詳解(檢視和陰影) UI控制元件——ANDROID

Android開發——事件分發機制---微信魚蝦蟹源碼搭建

lai reset 微信 影響 ren 事件分發機制 lis forum hlist 轉載請註明出處:http://h5.hxforum.com深入學習事件分發機制,是為了解決在Android開發中遇到的滑動沖突問題做準備。事件分發機制描述了用戶的手勢一系列事件是如何被An

Android SDK 目錄作用

1、add-ons 這裡面儲存著附加庫,比如GoogleMaps,當然你如果安裝了OphoneSDK,這裡也會有一些類庫在裡面。 2、docs 這裡面是Android SDKAPI參考文件,所有的API都可以在這裡查到。 3、market_licensing 作為A

最全!Android 開發狀態列配色

感覺 Android 狀態列一直是一個坑啊!! 並且國內不同 Android 的手機廠商也對狀態列做了不同的適配和修改。在此記錄以下實現不同效果的狀態列的方法 Android 4.4 之前,Andro

【轉】Android OkHttp3簡介使用

一 OKHttp簡介 OKHttp是一個處理網路請求的開源專案,Android 當前最火熱網路框架,由移動支付Square公司貢獻,用於替代HttpUrlConnection和Apache HttpClient(android API23 6.0裡已移除HttpClient)。 OKHttpGit

Android開發之藍芽(一)

一.概述 這篇文章是我學習Android開發官網以及網上一些其他文章總結而來,主要就是為了好好研究一下藍芽開發,看完這篇文章以後,我們就知道了怎樣使用藍芽API完成建立藍芽連線的必要四步:1.開啟藍芽;2.查詢附近已配對或可用的裝置;3.連線裝置;4.裝置間資

Android開發之位置定位與例項解析(GPS定位、Google網路定位,BaiduLBS(SDK)定位)

/** * 由經緯度獲取所在的城市及區域資訊 * @author caizhiming * */ private class ReadJSONFeedTask extends AsyncTask<String, Void, String> {

Android開發之EditText屬性

1、EditText輸入的文字為密碼形式的設定 (1)通過.xml裡設定:  把該EditText設為:android:password="true" // 以”.”形式顯示文字 (2)在程式碼裡設定: 通過設定EditText的setTransformation

Android開發——事件分發機制

0. 前言深入學習事件分發機制,是為了解決在Android開發中遇到的滑動衝突問題做準備。事件分發機制描述了使用者的手勢一系列事件是如何被Android系統傳遞並消費的。首先對事件分發機制進行概述:如果

Android開發學習之SQLite

一.SQLite的介紹 1.SQLite簡介  SQLite是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入 式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援 Windo

android開發之Parcelable使用

想要在兩個activity之間傳遞物件,那麼這個物件必須序列化,android中序列化一個物件有兩種方式,一種是實現Serializable介面,這個非常簡單,只需要宣告一下就可以了,不痛不癢。但是android中還有一種特有的序列化方法,那就是實現Parcel

Android開發之onTouchonClick

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android開發 -- 對話方塊 Dialog DialogFragment Android 官方推薦 DialogFragment 建立對話方塊 )

 Android 官方推薦使用 : DialogFragment 建立對話方塊 ,不推薦直接使用Dialog建立對話方塊,所以能用寫對話方塊儘量用DialogFragment。自定義對話方塊也方便很多 推薦一篇DialogFragment的文章:http://blog.csdn.n

android介面開發:ViewPager的,並用於仿微博滑動例項圖片滾動例項

1.ViewPager簡單使用 ViewPager是android擴充套件包android.support.v4 裡的一個繼承與ViewGroup元件,通過佈局管理器可以實現左右滑動來顯示不同的View。而這個View由PagerAdapter產生,用法類似於

web開發(三) 會話機制,CookieSession

response 客戶端請求 非正常關閉 特殊情況 刪除 session 協議 XML 容易 在網上看見一篇不錯的文章,寫的詳細。 以下內容引用那篇博文。轉載於《http://www.cnblogs.com/whgk/p/6422391.html》,在此僅供學習參考之用。

Android中APK簽名工具之jarsignerapksigner

內容 value signature align light 文件簽名 item als release 一.工具介紹 jarsigner是JDK提供的針對jar包簽名的通用工具, 位於JDK/bin/jarsigner.exe apksigner是Google官方提

Android 自定義view(1) --- Attr、StyleTheme

轉載:https://www.jianshu.com/p/dd79220b47dd 概念說明:       Attr:屬性,風格樣式的最小單元;      Style:風格,它是一系列Attr的集合用以定義一個View

Android的Drawable分類使用

一、前言 最近在看關於Android的書籍,發現居然把Drawable當做一個章節來講,感覺沒有必要啊,Drawable不就是圖片引用嗎。深入理解後才發現我們平常用的只是比較常用和簡單的,Drawable還是有很多其他實現方式的。今天就詳細講解一下Drawable。 二、概述 其實D

Android網路程式設計(二)ConnectivityManagerNetworkInfo

    一.   ConnectivityManager詳解      概要      ConnectivityManager是網路連線相關的管理器,它主要用於查詢網路狀態並在網路發生改變時發出狀態變化通知。這個類主要負責的下列四個方面:      1.  監控網路狀態(包