TextView設(shè)置文本樣式

在項(xiàng)目開發(fā)中經(jīng)常遇到一種情況:給字符串的某個(gè)或某幾個(gè)字符設(shè)置不同的顏色,比較笨的方法是使用幾個(gè)textview連著放置殃饿。這種方式太麻煩谋作,下面我們使用一種新的方式。

TextView中有一個(gè)類SpannableString壁晒,這是源碼的解釋:

/**
 * This is the class for text whose content is immutable but to which
 * markup objects can be attached and detached.
 * For mutable text, see {@link SpannableStringBuilder}.
 */

大概意思是這是文本編輯類(英語水平一般就不翻譯了)瓷们,可以對(duì)文本內(nèi)容就行設(shè)置和編輯。類方法不多秒咐,就兩個(gè):setSpan(設(shè)置文本樣式)和removeSpan(移除文本樣式)谬晕。
下面說一下具體的使用:

一、給textview設(shè)置背景色

通常情況下都是通過xml布局文件和textview.setBackground來設(shè)置背景(簡(jiǎn)單携取,就不說了)攒钳,下面我們來使用SpannableString給textView設(shè)置背景(上代碼)。

//設(shè)置背景色
 SpannableString spannableString = new SpannableString("設(shè)置背景色");
 spannableString.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvShowContent.setText(spannableString);

構(gòu)造器的參數(shù)就是要顯示的內(nèi)容雷滋,setSpan有四個(gè)參數(shù)不撑,第一個(gè)Object是我們要設(shè)置的背景顏色文兢,第二個(gè)參數(shù)和第三個(gè)參數(shù)是設(shè)置的背景色從哪開始,到哪結(jié)束焕檬,設(shè)置的文本的startIndex和endIndex姆坚,第四個(gè)參數(shù)有四個(gè)值:
Spanned.SPAN_INCLUSIVE_EXCLUSIVE:使用該樣式的文本之前的文本使用該樣式,之后的不使用
Spanned.SPAN_EXCLUSIVE_INCLUSIVE:使用該樣式的文本之前的不使用該樣式实愚,之后的使用該樣式
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE:使用該樣式的文本之前和之后的都不使用該樣式
Spanned.SPAN_INCLUSIVE_INCLUSIVE:使用該樣式的文本之前和之后都使用該樣式
效果圖:


背景色.png
二兼呵、給文本設(shè)置點(diǎn)擊事件

上代碼:

//設(shè)置背景色
SpannableString spannableString = new SpannableString("設(shè)置背景色");
spannableString.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//設(shè)置點(diǎn)擊事件
spannableString.setSpan(new ClickableSpan() {
       @Override
        public void onClick(View widget) {
             Toast.makeText(MainActivity2.this, "點(diǎn)擊前面的背景", Toast.LENGTH_SHORT).show();
         }
 }, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//這個(gè)必須的增加,對(duì)同一個(gè)控件只需要設(shè)置一次就行
tvShowContent.setMovementMethod(LinkMovementMethod.getInstance());
tvShowContent.setText(spannableString);

效果圖:


點(diǎn)擊設(shè)置事件.png
三腊敲、設(shè)置文本字體顏色
//前面設(shè)置文本內(nèi)容都一樣击喂,就不寫了,只放核心代碼
 spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

第一個(gè)參數(shù)就是設(shè)置的文本顏色碰辅,第2個(gè)和第3個(gè)參數(shù)控制著給那些文本設(shè)置顏色懂昂,第4個(gè)參數(shù)和上面的解釋是一樣的。擴(kuò)展一下:根據(jù)這個(gè)方法就可以給一個(gè)字符串的某個(gè)字符設(shè)置單獨(dú)的顏色没宾。
上圖:


給單獨(dú)的字符設(shè)置顏色.png
四凌彬、設(shè)置刪除線和下劃線
SpannableString spannableString3 = new SpannableString("\n1998");
spannableString3.setSpan(new ForegroundColorSpan(Color.RED), 0, spannableString3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 //設(shè)置刪除線
spannableString3.setSpan(new StrikethroughSpan(), 0, spannableString3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//增加下劃線
spannableString3.setSpan(new UnderlineSpan(), 0, spannableString3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvShowContent.append(spannableString3);

刪除線一般都用在電商的價(jià)格上,刪除原價(jià)榕吼,顯示優(yōu)惠后的價(jià)格


刪除線和下劃線.png
五饿序、在某個(gè)位置插入圖片
       //在textview中設(shè)置圖片
        SpannableString spannableString5 = new SpannableString("\n設(shè)置圖片,在第一個(gè)字符上設(shè)置");
        spannableString5.setSpan(new DynamicDrawableSpan() {
            @Override
            public Drawable getDrawable() {
                Drawable d = getResources().getDrawable(R.drawable.ic_launcher_background);
                d.setBounds(0, 0, 50, 50);
                return d;
            }
        }, 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tvShowContent.append(spannableString5);

其中d.setBounds()用來設(shè)置顯示的圖片的大小羹蚣,2和4表示圖片的位置原探,即將"圖片"字由圖片代替,上圖:


device-2018-01-06-163400.png
六顽素、設(shè)置縮放
        //設(shè)置縮放
        SpannableString spannableString16=new SpannableString("\n基于x軸縮放");
        //ScaleXSpan中的參數(shù)==1表示正常顯示咽弦,大于1表示橫向擴(kuò)大,小于0表示反向正常大小顯示胁出,小于-1表示反向顯示且橫向擴(kuò)大
        //大于0小于1表示縮放
        spannableString16.setSpan(new ScaleXSpan( 0.9f),0,spannableString16.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tvShowContent.append(spannableString16);

縮放的規(guī)則在注釋中都有解釋型型,0.9f表示在原來的基礎(chǔ)上縮小了0.1


device-2018-01-06-164011.png
七、設(shè)置字體樣式 粗體 斜體
        SpannableString spannableString7=new SpannableString("\n我是粗體,我是斜體,我是粗斜體");
        spannableString7.setSpan(new StyleSpan(Typeface.BOLD),0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString7.setSpan(new StyleSpan(Typeface.ITALIC),5,10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString7.setSpan(new StyleSpan(Typeface.BOLD_ITALIC),10,spannableString7.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tvShowContent.append(spannableString7);

Typeface.BOLD:粗體
Typeface.ITALIC:斜體
Typeface.BOLD_ITALIC:斜粗體
NORMAL.NORMAL:正常字體


device-2018-01-06-164321.png
八全蝶、設(shè)置超鏈接
       SpannableString spannableString8=new SpannableString("\n打電話闹蒜,發(fā)短信,發(fā)郵件抑淫,打開網(wǎng)頁");
        spannableString8.setSpan(new URLSpan("tel:18838206194"),1,4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString8.setSpan(new URLSpan("smsto:18838206194"),5,8,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString8.setSpan(new URLSpan("mailto:653848947@qq.com"),9,12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString8.setSpan(new URLSpan("http://www.baidu.com"),13,17,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //tvShowContent.setMovementMethod(LinkMovementMethod.getInstance());//這行代碼如果tvShowContent已經(jīng)設(shè)置過了可以不寫
        tvShowContent.append(spannableString8);
device-2018-01-06-164548.png

超鏈接的字體顏色是根據(jù)手機(jī)不用來顯示的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绷落,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子始苇,更是在濱河造成了極大的恐慌砌烁,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異函喉,居然都是意外死亡避归,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門管呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梳毙,“玉大人,你說我怎么就攤上這事捐下《偬欤” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蔑担,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我咽白,道長(zhǎng)啤握,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任晶框,我火速辦了婚禮排抬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘授段。我一直安慰自己蹲蒲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布侵贵。 她就那樣靜靜地躺著届搁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窍育。 梳的紋絲不亂的頭發(fā)上卡睦,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音漱抓,去河邊找鬼表锻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乞娄,可吹牛的內(nèi)容都是我干的瞬逊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仪或,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼确镊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起溶其,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤骚腥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瓶逃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體束铭,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡廓块,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了契沫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带猴。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖懈万,靈堂內(nèi)的尸體忽然破棺而出拴清,到底是詐尸還是另有隱情,我是刑警寧澤会通,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布口予,位于F島的核電站,受9級(jí)特大地震影響涕侈,放射性物質(zhì)發(fā)生泄漏沪停。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一裳涛、第九天 我趴在偏房一處隱蔽的房頂上張望木张。 院中可真熱鬧,春花似錦端三、人聲如沸舷礼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妻献。三九已至,卻和暖如春团赁,著一層夾襖步出監(jiān)牢的瞬間旋奢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工然痊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留至朗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓剧浸,卻偏偏與公主長(zhǎng)得像锹引,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唆香,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354