前言
在android開(kāi)發(fā)中段多,我們不免會(huì)用到 TextView 的各種顯示效果酸些,如字體樣式,顏色琐谤,大小蟆技,背景等。今天要講的就是這么一個(gè)工具類SpannableStringUtil斗忌,方便快捷的實(shí)現(xiàn)各種文字效果质礼。
今天涉及的內(nèi)容有:
- SpannableString"截取"基本介紹
- SpannableStringUtil的各種特效使用介紹
- SpannableStringUtil的綜合使用
- SpannableStringUtil源碼
先上張效果圖
一. 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);
效果圖
四. SpannableStringUtil源碼
下面貼出SpannableStringUtil類源碼