Android spannableStringBuilder用法整理

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

參數(shù)說(shuō)明:

object what :對(duì)應(yīng)的各種Span

int start:開(kāi)始應(yīng)用指定Span的位置,索引從0開(kāi)始

int end:結(jié)束應(yīng)用指定Span的位置,特效并不包括這個(gè)位置。比如如果這里數(shù)為3(即第4個(gè)字符),第4個(gè)字符不會(huì)有任何特效。

int flags:取值有如下四個(gè)

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范圍的前面和后面插入新字符都不會(huì)應(yīng)用新樣式

Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即僅在范圍字符的后面插入新字符時(shí)會(huì)應(yīng)用新樣式

Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。

Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。

private void addspannablestringbuilderSpan() {

SpannableStringBuilder ss=newSpannableStringBuilder("xxxxxxxxxxxxxxxxxxxx");

//用顏色標(biāo)記文本

ss.setSpan(newForegroundColorSpan(Color.RED),0,2,,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用超鏈接標(biāo)記文本

ss.setSpan(newURLSpan("tel:4155551212"),2,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用樣式標(biāo)記文本(斜體)

ss.setSpan(newStyleSpan(Typeface.BOLD_ITALIC),5,7,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用刪除線(xiàn)標(biāo)記文本

ss.setSpan(newStrikethroughSpan(),7,10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用下劃線(xiàn)標(biāo)記文本

ss.setSpan(newUnderlineSpan(),10,16,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用顏色標(biāo)記

ss.setSpan(newForegroundColorSpan(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());

//創(chuàng)建ImageSpan

ImageSpan span =newImageSpan(d, ImageSpan.ALIGN_BASELINE);

//用ImageSpan替換文本

ss.setSpan(span,18,19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.setText(ss);

tv.setMovementMethod(LinkMovementMethod.getInstance());//實(shí)現(xiàn)文本的滾動(dòng)

}


/**

* 光柵效果

*/

privatevoidaddRasterizerSpan() {

SpannableString spanText =newSpannableString("StrikethroughSpan");

spanText.setSpan(newStrikethroughSpan(),0,7, Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanText);

}

/**

* 修飾效果

*/

privatevoidaddmaskfilteSpan() {

SpannableString spanText =newSpannableString("benzlocke6666666");

intlength = spanText.length();

//模糊(BlurMaskFilter)

MaskFilterSpan maskFilterSpan =newMaskFilterSpan(newBlurMaskFilter(3, Blur.OUTER));

spanText.setSpan(maskFilterSpan,0, length -10, Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

//浮雕(EmbossMaskFilter)

maskFilterSpan =newMaskFilterSpan(newEmbossMaskFilter(newfloat[]{1,1,3},1.5f,8,3));

spanText.setSpan(maskFilterSpan, length -10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanText);

}

/**

* 超鏈接

*/

privatevoidaddUrlSpan() {

SpannableString spanString =newSpannableString("超鏈接");

URLSpan span =newURLSpan("tel:0123456789");

spanString.setSpan(span,0,3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

tv.setMovementMethod(LinkMovementMethod.getInstance());

/**

* 文字背景顏色

*/

privatevoidaddBackColorSpan() {

SpannableString spanString =newSpannableString("文字背景顏色");

BackgroundColorSpan span =newBackgroundColorSpan(Color.YELLOW);

spanString.setSpan(span,0,6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

}

/**

* 文字顏色

*/

privatevoidaddForeColorSpan() {

SpannableString spanString =newSpannableString("文字顏色");

ForegroundColorSpan span =newForegroundColorSpan(Color.BLUE);

spanString.setSpan(span,0,4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

}

/**

* 字體大小

*/

privatevoidaddFontSpan() {

SpannableString spanString =newSpannableString("36號(hào)字體");

AbsoluteSizeSpan span =newAbsoluteSizeSpan(36);

spanString.setSpan(span,0,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

}

/**

* 粗體,斜體

*/

privatevoidaddStyleSpan() {

SpannableString spanString =newSpannableString("ABCDEF");

StyleSpan span =newStyleSpan(Typeface.BOLD_ITALIC);

spanString.setSpan(span,0,3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

}

/**

* 刪除線(xiàn)

*/

privatevoidaddStrikeSpan() {

SpannableString spanString =newSpannableString("刪除線(xiàn)");

StrikethroughSpan span =newStrikethroughSpan();

spanString.setSpan(span,0,3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

}

/**

* 下劃線(xiàn)

*/

privatevoidaddUnderLineSpan() {

SpannableString spanString =newSpannableString("下劃線(xiàn)");

UnderlineSpan span =newUnderlineSpan();

spanString.setSpan(span,0,3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

}

/**

* 圖片

*/

privatevoidaddImageSpan() {

SpannableString spanString =newSpannableString(" ");

Drawable d = getResources().getDrawable(R.drawable.ic_launcher);

d.setBounds(0,0, d.getIntrinsicWidth(), d.getIntrinsicHeight());

ImageSpan span =newImageSpan(d, ImageSpan.ALIGN_BASELINE);

spanString.setSpan(span,0,1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append("\n");

tv.append(spanString);

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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