android 你所不知道的類SpannableStringBuilder的總結--實現圖文混排,檢視更多,下劃線等等
阿新 • • 發佈:2019-02-02
今天無意中看到的一個類SpannableStringBuilder,查了下感覺很牛叉;
privateButton image_btn;
privateButton maskfilte_btn;
privateButton Rasterizer_btn;
privateButton spannablestringbuilder;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) this.findViewById(R.id.tv);
underline_btn = (Button) this.findViewById(R.id.underline_btn);
strike_btn = (Button) this.findViewById(R.id.strike_btn);
style_btn = (Button) this.findViewById(R.id.style_btn);
font_btn = (Button) this.findViewById(R.id.font_btn);
color_btn1 = (Button) this.findViewById(R.id.color_btn1);
color_btn2 = (Button) this.findViewById(R.id.color_btn2);
url_btn = (Button) this.findViewById(R.id.url_btn);
image_btn = (Button) this.findViewById(R.id.image_btn);
maskfilte_btn = (Button) this.findViewById(R.id.maskfilte_btn);
Rasterizer_btn = (Button) this.findViewById(R.id.Rasterizer_btn);
spannablestringbuilder = (Button) this.findViewById(R.id.spannablestringbuilder);
underline_btn.setOnClickListener(this);
strike_btn.setOnClickListener(this);
style_btn.setOnClickListener(this);
font_btn.setOnClickListener(this);
color_btn1.setOnClickListener(this);
color_btn2.setOnClickListener(this);
url_btn.setOnClickListener(this);
image_btn.setOnClickListener(this);
maskfilte_btn.setOnClickListener(this);
Rasterizer_btn.setOnClickListener(this);
spannablestringbuilder.setOnClickListener(this);
}
@Override
publicvoidonClick(View v) {
switch(v.getId()) {
caseR.id.underline_btn:
addUnderLineSpan();
break;
caseR.id.strike_btn:
addStrikeSpan();
break;
caseR.id.style_btn:
addStyleSpan();
break;
caseR.id.font_btn:
addFontSpan();
break;
caseR.id.color_btn1:
addForeColorSpan();
break;
caseR.id.color_btn2:
addBackColorSpan();
break;
caseR.id.url_btn:
addUrlSpan();
break;
caseR.id.image_btn:
addImageSpan();
break;
caseR.id.maskfilte_btn:
addmaskfilteSpan();
break;
caseR.id.Rasterizer_btn:
addRasterizerSpan();
break;
caseR.id.spannablestringbuilder:
addspannablestringbuilderSpan();
break;
}
}
/**
* spannablestringbuilder
*/
privatevoidaddspannablestringbuilderSpan() {
SpannableStringBuilder ss=newSpannableStringBuilder("紅色超連結斜體刪除線綠色下劃線圖片:.");
//用顏色標記文字
ss.setSpan(newForegroundColorSpan(Color.RED), 0, 2,
//setSpan時需要指定的 flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括).
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//用超連結標記文字
ss.setSpan(newURLSpan("tel:4155551212"), 2, 5,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//用樣式標記文字(斜體)
ss.setSpan(newStyleSpan(Typeface.BOLD_ITALIC), 5, 7,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//用刪除線標記文字
ss.setSpan(newStrikethroughSpan(), 7, 10,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//用下劃線標記文字
ss.setSpan(newUnderlineSpan(), 10, 16,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//用顏色標記
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());
//建立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()); //實現文字的滾動
}
/*
* Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前後都不包括,即在指定範圍的前面和後面插入新字元都不會應用新樣式
* Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,後面包括。即僅在範圍字元的後面插入新字元時會應用新樣式
* Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,後面不包括。
* Spannable.SPAN_INCLUSIVE_INCLUSIVE :前後都包括。
*/
/**
* 光柵效果
*/
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號字型");
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);
}
/**
* 刪除線
*/
privatevoidaddStrikeSpan() {
SpannableString spanString = newSpannableString("刪除線");
StrikethroughSpan span = newStrikethroughSpan();
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append("\n");
tv.append(spanString);
}
/**
* 下劃線
*/
privatevoidaddUnderLineSpan() {
SpannableString spanString = newSpannableString("下劃線");
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);
}
}