SpannableString&SpannableStringBuilder定製文本

SpannableString&SpannableStringBuilder定製文本

用SpannableString和SpannableStringBuilder來完成,兩者區別:前者針對的是不可變文本,而後者則是針對可變文本
SpannableString可供我們使用的API有下面這些:
  • BackgroundColorSpan 背景色
  • ClickableSpan 文本可點擊,有點擊事件
  • ForegroundColorSpan 文本顏色(前景色)
  • MaskFilterSpan 修飾效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
  • MetricAffectingSpan 父類,一般不用
  • RasterizerSpan 光柵效果
  • StrikethroughSpan 刪除線(中劃線)
  • SuggestionSpan 相當於佔位符
  • UnderlineSpan 下劃線
  • AbsoluteSizeSpan 絕對大小(文本字體)
  • DynamicDrawableSpan 設置圖片,基於文本基線或底部對齊。
  • ImageSpan 圖片
  • RelativeSizeSpan 相對大小(文本字體)
  • ReplacementSpan 父類,一般不用
  • ScaleXSpan 基於x軸縮放
  • StyleSpan 字體樣式:粗體、斜體等
  • SubscriptSpan 下標(數學公式會用到)
  • SuperscriptSpan 上標(數學公式會用到)
  • TextAppearanceSpan 文本外貌(包括字體、大小、樣式和顏色)
  • TypefaceSpan 文本字體
  • URLSpan 文本超鏈接

 TextView t1 = (TextView) findViewById(R.id.txtOne);
        
        SpannableString span = new SpannableString("紅色打電話斜體刪除線綠色下劃線圖片:.");
        //1.設置背景色,setSpan時需要指定的flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括)
        span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //2.用超鏈接標記文本
        span.setSpan(new URLSpan("tel:4155551212"), 2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //3.用樣式標記文本(斜體)
        span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //4.用刪除線標記文本
        span.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //5.用下劃線標記文本
        span.setSpan(new UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //6.用顏色標記
        span.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 13,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //7.//獲取Drawable資源
        Drawable d = getResources().getDrawable(R.drawable.icon);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        //8.創建ImageSpan,然後用ImageSpan來替換文本
        ImageSpan imgspan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
        span.setSpan(imgspan, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        t1.setText(span);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章