SpannableStringUtil實(shí)現(xiàn)豐富文字效果

前言

在android開(kāi)發(fā)中段多,我們不免會(huì)用到 TextView 的各種顯示效果酸些,如字體樣式,顏色琐谤,大小蟆技,背景等。今天要講的就是這么一個(gè)工具類SpannableStringUtil斗忌,方便快捷的實(shí)現(xiàn)各種文字效果质礼。

今天涉及的內(nèi)容有:

  1. SpannableString"截取"基本介紹
  2. SpannableStringUtil的各種特效使用介紹
  3. SpannableStringUtil的綜合使用
  4. SpannableStringUtil源碼

先上張效果圖


1.png
一. SpannableString"截取"基本介紹

SpannableString設(shè)置樣式的時(shí)候,涉及到下標(biāo)"截取"樣式的問(wèn)題织阳,其"截取"樣式分以下四種:

  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE: (start眶蕉,end) --- 前后下標(biāo)都不包括
  Spanned.SPAN_EXCLUSIVE_INCLUSIVE: (start,end] --- 前面不包括,后面包括
  Spanned.SPAN_INCLUSIVE_EXCLUSIVE: [start陈哑,end) --- 前面包括,后面不包括
  Spanned.SPAN_INCLUSIVE_INCLUSIVE: [start妻坝,end] --- 前后都包括
二. SpannableStringUtil的各種特效使用介紹
2.01 設(shè)置字體大小
        //設(shè)置字體大小
        String textSizeStr="設(shè)置字體大小";
        String textSizeChar="字體";
        SpannableString textSizeSp=SpannableStringUtil.setTextSize(textSizeStr,textSizeChar,1.5f);
        mTvTextSize.setText(textSizeSp);
2.02 設(shè)置文字前景色
        //設(shè)置文字前景色
        String textFrontColorStr="設(shè)置文字前景色";
        String textFrontColorChar="前景色";
        SpannableString textFrontColorSp=SpannableStringUtil.setTextFrontColor(textFrontColorStr,textFrontColorChar,R.color.red);
        mTvTextFrontColor.setText(textFrontColorSp);
2.03 設(shè)置背景色
        //設(shè)置背景色
        String textBgColorStr="設(shè)置背景色";
        String textBgColorChar="背景色";
        SpannableString textBgColorSp=SpannableStringUtil.setTextBackgroundColor(textBgColorStr,textBgColorChar,R.color.blue);
        mTvTextBgColor.setText(textBgColorSp);
2.04 設(shè)置字體樣式
        String textStyleStr="設(shè)置字體樣式,普通,粗體,斜體,粗斜體,寫(xiě)完了";
        String textStyleOneChar="普通";
        String textStyleTwoChar="粗體";
        String textStyleThreeChar="斜體";
        String textStyleFourChar="粗斜體";
        SpannableString oneSp=SpannableStringUtil.setTextStyle(textStyleStr,textStyleOneChar, Typeface.NORMAL);
        SpannableString twoSp=SpannableStringUtil.setTextStyle(oneSp,textStyleTwoChar, Typeface.BOLD);
        SpannableString threeSp=SpannableStringUtil.setTextStyle(twoSp,textStyleThreeChar, Typeface.ITALIC);
        SpannableString fourSp=SpannableStringUtil.setTextStyle(threeSp,textStyleFourChar, Typeface.BOLD_ITALIC);
        mTvTextStyle.setText(fourSp);
2.05 設(shè)置文字劃線
        String textLineStr="設(shè)置文字劃線,下劃線和中劃線,寫(xiě)完了";
        String textLineOneChar="下劃線";
        String textLineTwoChar="中劃線";
        SpannableString onefSp=SpannableStringUtil.setTextLine(textLineStr,textLineOneChar,false);
        SpannableString twofSp=SpannableStringUtil.setTextLine(onefSp,textLineTwoChar,true);
        mTvTextLine.setText(twofSp);
2.06 設(shè)置內(nèi)容上角標(biāo)伸眶,下角標(biāo)

注意mTvTextMark要設(shè)置足夠的paddingTop和paddingBottom,不然上下標(biāo)會(huì)顯示不全

        //設(shè)置內(nèi)容上角標(biāo)刽宪,下角標(biāo)
        //注意mTvTextMark要設(shè)置足夠的paddingTop和paddingBottom厘贼,不然上下標(biāo)會(huì)顯示不全
        String textMarkStr="設(shè)置文字上角標(biāo)和文字下角標(biāo)";
        String textMarkOneChar="上角標(biāo)";
        String textMarkTwoChar="下角標(biāo)";
        SpannableString oneMarkSp=SpannableStringUtil.setTextMark(textMarkStr,textMarkOneChar,true);
        SpannableString twoMarkSp=SpannableStringUtil.setTextMark(oneMarkSp,textMarkTwoChar,false);
        mTvTextMark.setText(twoMarkSp);
2.07 設(shè)置內(nèi)容沿x方向拉伸
        String textXStr="設(shè)置內(nèi)容沿x方向拉伸";
        String textXChar="x方向拉伸";
        SpannableString xSp=SpannableStringUtil.setTextScaleX(textXStr,textXChar,2f);
        mTvTextXscale.setText(xSp);
2.08 左側(cè)右側(cè)插入圖片
        String pictureStr="設(shè)置左側(cè)和右側(cè)插入圖片";
        String pictureOneChar="左";
        String pictureTwoChar="右";
        SpannableString pictureOneSp=SpannableStringUtil.setTextLeftImage(pictureStr,pictureOneChar,R.mipmap.ic_check);
        SpannableString pictureTwoSp=SpannableStringUtil.setTextRightImage(pictureOneSp,pictureTwoChar,R.mipmap.ic_check);
        mTvPicture.setText(pictureTwoSp);
2.09 將文字替換成圖片
        String replaceStr="將文字替換成圖片";
        String replaceChar="文字";
        SpannableString replaceSp=SpannableStringUtil.replaceTextByImage(replaceStr,replaceChar,R.mipmap.ic_check);
        mTvReplaceByImage.setText(replaceSp);
2.10 設(shè)置可點(diǎn)擊
        //設(shè)置可點(diǎn)擊
        String clickableStr="我是可以點(diǎn)擊的";
        String clickableChar="點(diǎn)擊";
        SpannableString clickableSp=SpannableStringUtil.setClickText(clickableStr, clickableChar, R.color.red, false, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showShort("我被點(diǎn)擊了");
            }
        });
        mTvTextClick.setText(clickableSp);
        //必須設(shè)置才能響應(yīng)點(diǎn)擊事件
        mTvTextClick.setMovementMethod(LinkMovementMethod.getInstance());
2.11 打電話
        //打電話
        String callStr="電話號(hào)碼:13721057328";
        String callChar="13721057328";
        SpannableString callSp=SpannableStringUtil.callUp(callStr,callChar,callChar);
        mTvTextCall.setText(callSp);
        //必須設(shè)置才能響應(yīng)點(diǎn)擊事件
        mTvTextCall.setMovementMethod(LinkMovementMethod.getInstance());
2.12 發(fā)郵件,短信,彩信
        //發(fā)郵件,短信,彩信
        String functionStr="發(fā)郵件,短信,彩信";
        String emailChar="郵件";
        String smsChar="短信";
        String mmsChar="彩信";
        String functionEmail="125489713@qq.com";
        String functionPhone="13721057328";
        SpannableString  functionSp1=SpannableStringUtil.sendEmail(functionStr,functionEmail,emailChar);
        SpannableString  functionSp2=SpannableStringUtil.sendSMS(functionSp1,functionPhone,smsChar);
        SpannableString  functionSp3=SpannableStringUtil.sendMMS(functionSp2,functionPhone,mmsChar);
        mTvTextFunction.setText(functionSp3);
        //必須設(shè)置才能響應(yīng)點(diǎn)擊事件
        mTvTextFunction.setMovementMethod(LinkMovementMethod.getInstance());
2.13 打開(kāi)地圖,網(wǎng)頁(yè)和超鏈接
        String geoStr="打開(kāi)地圖,網(wǎng)頁(yè)和超鏈接";
        String longitude="121.4";//經(jīng)度
        String latitude="121.4";//緯度
        SpannableString geoSp=SpannableStringUtil.sendGEO(geoStr,longitude,latitude,"地圖");
        SpannableString webSp=SpannableStringUtil.openWeb(geoSp,"http://www.baidu.com","網(wǎng)頁(yè)");
        SpannableString urlSp=SpannableStringUtil.setTextURL(webSp,"http://www.baidu.com","超鏈接");
        mTvTextGEO.setText(urlSp);
        //必須設(shè)置才能響應(yīng)點(diǎn)擊事件
        mTvTextGEO.setMovementMethod(LinkMovementMethod.getInstance());
2.14 設(shè)置項(xiàng)目符號(hào)
        //設(shè)置項(xiàng)目符號(hào)
        String itemStr="設(shè)置項(xiàng)目符號(hào)";
        SpannableString itemSp=SpannableStringUtil.setTextItem(itemStr,10,R.color.black,itemStr);
        mTvTextItem.setText(itemSp);
2.15 設(shè)置字體模糊ABCD和浮雕效果

注:設(shè)置浮雕效果需要在對(duì)應(yīng)的mainfast的activity中添加android:hardwareAccelerated="false"

        String effectStr="設(shè)置字體模糊ABCD和浮雕效果";
        SpannableString defultEffectSp=SpannableStringUtil.setTextFuzzy(effectStr,10, BlurMaskFilter.Blur.NORMAL,"A");
        SpannableString innerEffectSp=SpannableStringUtil.setTextFuzzy(defultEffectSp,10, BlurMaskFilter.Blur.INNER,"B");
        SpannableString outerEffectSp=SpannableStringUtil.setTextFuzzy(innerEffectSp,10, BlurMaskFilter.Blur.OUTER,"C");
        SpannableString solidEffectSp=SpannableStringUtil.setTextFuzzy(outerEffectSp,10, BlurMaskFilter.Blur.SOLID,"D");
        //設(shè)置浮雕效果需要在對(duì)應(yīng)的mainfast的activity中添加android:hardwareAccelerated="false"
        SpannableString reliefEffectSp=SpannableStringUtil.setTextRelief(solidEffectSp,new float[]{10, 10, 10}, 0.5f, 1f, 1f,"浮雕");
        mTvTextEffect.setText(reliefEffectSp);

在mainfast中加入配置代碼如下:

   <activity android:name=".MainActivity"
            android:hardwareAccelerated="false">
            //以下代碼省略
            //......
        </activity>
三. SpannableStringUtil的綜合使用

下面以實(shí)現(xiàn)有新消息展示有圓點(diǎn)為例:
實(shí)現(xiàn)代碼如下:

        //綜合使用,展示新消息小圓點(diǎn)
        String pointStr="新消息?";
        String pointFrontColorChar="?";
        SpannableString pointSizeSp=SpannableStringUtil.setTextSize(pointStr,pointFrontColorChar,2.2f);
        SpannableString pointFrontColorSp=SpannableStringUtil.setTextFrontColor(pointSizeSp,pointFrontColorChar,R.color.red);
        mTvTextPoint.setText(pointFrontColorSp);

效果圖


image.png
四. SpannableStringUtil源碼

下面貼出SpannableStringUtil類源碼

還有 84% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
支付 ¥2.00 繼續(xù)閱讀
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市圣拄,隨后出現(xiàn)的幾起案子嘴秸,更是在濱河造成了極大的恐慌,老刑警劉巖庇谆,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岳掐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡饭耳,警方通過(guò)查閱死者的電腦和手機(jī)串述,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寞肖,“玉大人纲酗,你說(shuō)我怎么就攤上這事⌒麦。” “怎么了觅赊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)琼稻。 經(jīng)常有香客問(wèn)我吮螺,道長(zhǎng),這世上最難降的妖魔是什么帕翻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任鸠补,我火速辦了婚禮,結(jié)果婚禮上熊咽,老公的妹妹穿的比我還像新娘莫鸭。我一直安慰自己闹丐,他們只是感情好横殴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著卿拴,像睡著了一般衫仑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堕花,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天文狱,我揣著相機(jī)與錄音,去河邊找鬼缘挽。 笑死瞄崇,一個(gè)胖子當(dāng)著我的面吹牛呻粹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苏研,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼等浊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了摹蘑?” 一聲冷哼從身側(cè)響起筹燕,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衅鹿,沒(méi)想到半個(gè)月后撒踪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡大渤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年制妄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泵三。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忍捡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出切黔,到底是詐尸還是另有隱情砸脊,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布纬霞,位于F島的核電站凌埂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诗芜。R本人自食惡果不足惜瞳抓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伏恐。 院中可真熱鬧孩哑,春花似錦、人聲如沸翠桦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)销凑。三九已至丛晌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斗幼,已是汗流浹背澎蛛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜕窿,地道東北人谋逻。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓呆馁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親毁兆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子智哀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 姓名 連嘉瑋 學(xué)號(hào) 16040120089 轉(zhuǎn)自:http://www.reibang.com/p/b5fb515...
    連嘉瑋閱讀 1,293評(píng)論 1 0
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 6,358評(píng)論 0 17
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)荧恍、插件瓷叫、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,033評(píng)論 4 62
  • 今天是想選題想到窒息的第10086天摹菠,就來(lái)聊一聊最近看的電影吧,第一次看完之后記得這么多細(xì)節(jié)骗爆,如果有不完善或者記錯(cuò)...
    魚(yú)肚白blue閱讀 510評(píng)論 0 4