1. 程式人生 > >android 你所不知道的類SpannableStringBuilder的總結--實現圖文混排,檢視更多,下劃線等等

android 你所不知道的類SpannableStringBuilder的總結--實現圖文混排,檢視更多,下劃線等等

今天無意中看到的一個類SpannableStringBuilder,查了下感覺很牛叉;

1.看下實現的效果

第一種 第二種 實現的程式碼見   使用的模板

2.簡單的使用模板:

publicclassMainActivity extendsActivity implementsOnClickListener { privateTextView tv; privateButton underline_btn; privateButton strike_btn; privateButton style_btn; privateButton font_btn; privateButton color_btn1; privateButton color_btn2; privateButton url_btn;
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), 02 //setSpan時需要指定的 flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括). Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //用超連結標記文字 ss.setSpan(newURLSpan("tel:4155551212"), 25 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //用樣式標記文字(斜體) ss.setSpan(newStyleSpan(Typeface.BOLD_ITALIC), 57 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //用刪除線標記文字 ss.setSpan(newStrikethroughSpan(), 710 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //用下劃線標記文字 ss.setSpan(newUnderlineSpan(), 1016 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //用顏色標記 ss.setSpan(newForegroundColorSpan(Color.GREEN), 1012 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //獲取Drawable資源 Drawable d = getResources().getDrawable(R.drawable.ic_launcher);  d.setBounds(00, d.getIntrinsicWidth(), d.getIntrinsicHeight()); //建立ImageSpan ImageSpan span = newImageSpan(d, ImageSpan.ALIGN_BASELINE); //用ImageSpan替換文字 ss.setSpan(span, 1819, 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(), 07, 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, 83)); 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, 03, 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, 06, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append("\n"); tv.append(spanString); } /** * 文字顏色 */ privatevoidaddForeColorSpan() { SpannableString spanString = newSpannableString("文字顏色"); ForegroundColorSpan span = newForegroundColorSpan(Color.BLUE); spanString.setSpan(span, 04, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append("\n"); tv.append(spanString); } /** * 字型大小 */ privatevoidaddFontSpan() { SpannableString spanString = newSpannableString("36號字型"); AbsoluteSizeSpan span = newAbsoluteSizeSpan(36); spanString.setSpan(span, 05, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append("\n"); tv.append(spanString); } /** * 粗體,斜體 */ privatevoidaddStyleSpan() { SpannableString spanString = newSpannableString("ABCDEF"); StyleSpan span = newStyleSpan(Typeface.BOLD_ITALIC); spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append("\n"); tv.append(spanString); } /** * 刪除線 */ privatevoidaddStrikeSpan() { SpannableString spanString = newSpannableString("刪除線"); StrikethroughSpan span = newStrikethroughSpan(); spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append("\n"); tv.append(spanString); } /** * 下劃線 */ privatevoidaddUnderLineSpan() { SpannableString spanString = newSpannableString("下劃線"); UnderlineSpan span = newUnderlineSpan(); spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append("\n"); tv.append(spanString); } /** * 圖片 */ privatevoidaddImageSpan() { SpannableString spanString = newSpannableString(" "); Drawable d = getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(00, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = newImageSpan(d, ImageSpan.ALIGN_BASELINE); spanString.setSpan(span, 01, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append("\n"); tv.append(spanString); } }

更多: