美文网首页
SpannableStringBuilder 笔

SpannableStringBuilder 笔

作者: Demon鑫 | 来源:发表于2017-01-05 15:16 被阅读0次

    TextView官方加强版

    0.介绍

    • SpannableStringBuilder
      可以拼接
    • SpannableString
      不可拼接

    1.方法

    改变文本样式
    setSpan(Object what, int start, int end, int flags)

    • start:开始位置
    • end:结束位置,并不包括这个位置。
    • flags:取值有如下四个
    • Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不应用效果,后面应用效果。
    • Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面应用效果,后面不应用效果。
    • Spannable.SPAN_INCUJSIVE_INCLUSIVE:前后应用效果。
    • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括。
    • what: 对应的各种Span,不同的Span对应不同的样式。已知的可用类有
    • BackgroundColorSpan : 文本背景色
    • ForegroundColorSpan : 文本颜色
    • MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕
    • RasterizerSpan : 光栅效果
    • StrikethroughSpan : 删除线
    • SuggestionSpan : 相当于占位符
    • UnderlineSpan : 下划线
    • AbsoluteSizeSpan : 文本字体(绝对大小)
    • DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。
    • ImageSpan : 图片
    • RelativeSizeSpan : 相对大小(文本字体)
    • ScaleXSpan : 基于x轴缩放
    • StyleSpan : 字体样式:粗体、斜体等
    • SubscriptSpan : 下标(数学公式会用到)
    • SuperscriptSpan : 上标(数学公式会用到)
    • TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)
    • TypefaceSpan : 文本字体
    • URLSpan : 文本超链接
    • ClickableSpan : 点击事件

    3.使用实战

    1.TextView 超链接布局

    drawabletv_link_selector.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:color="#ffffff"/>
        <item android:color="#FF364A61"/>
    </selector>
    
    2.TextView 布局
    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColorLink="@drawable/tv_link_selector"
        android:textSize="18dp"/>
    
    3.calss代码
    /**
     * 大体功能测试
     */
    private void test() {
        SpannableStringBuilder spsb = new SpannableStringBuilder("字体颜色。");
        spsb.append("爷是有背景的人。");
        spsb.append("爷说字体要大。");
        spsb.append("爷要粗!");
        spsb.append("葛优瘫了。");
        spsb.append("加粗版的葛优瘫。");
        spsb.append("加条删除线吧。");
        spsb.append("来条下划线。");
        spsb.append("图片");
        spsb.append("有本事点我试试。");
    
        // 设置--字体颜色
        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#009ad6"));
        spsb.setSpan(colorSpan, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--背景颜色
        BackgroundColorSpan bgColorSpan = new BackgroundColorSpan(Color.parseColor("#009ad6"));
        spsb.setSpan(bgColorSpan, 5, 13, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--字体大小
        AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(50);
        spsb.setSpan(absoluteSizeSpan, 13, 20, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--粗体
        StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);
        spsb.setSpan(styleSpan, 20, 24, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--斜体
        StyleSpan styleSpan2 = new StyleSpan(Typeface.ITALIC);
        spsb.setSpan(styleSpan2, 24, 29, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--粗斜体
        StyleSpan styleSpan3 = new StyleSpan(Typeface.BOLD_ITALIC);
        spsb.setSpan(styleSpan3, 29, 37, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--删除线
        StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
        spsb.setSpan(strikethroughSpan, 37, 44, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--下划线
        UnderlineSpan underlineSpan = new UnderlineSpan();
        spsb.setSpan(underlineSpan, 44, 50, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--图片
        ImageSpan imageSpan = new ImageSpan(this, R.mipmap.ic_launcher);
        //也可以这样
        //Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
        //drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        //ImageSpan imageSpan1 = new ImageSpan(drawable);
        //将index为50-52的字符用图片替代
        spsb.setSpan(imageSpan, 50, 52, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        // 设置--点击事件
        ClickableSpan cs = new ClickableSpan() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "安倍这老狗。", Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void updateDrawState(TextPaint ds) {
                // 超链接的文本颜色
                ds.setColor(Color.parseColor("#009ad6"));
                // 是否显示下划线
                ds.setUnderlineText(false);
                ds.clearShadowLayer();
            }
        };
        spsb.setSpan(cs, 52, 60, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    
        tv1.setText(spsb);
        // 设置--点击事件(相关)
        tv1.setMovementMethod(LinkMovementMethod.getInstance());
    }
    

    2017-1-5 15:15:49

    相关文章

      网友评论

          本文标题:SpannableStringBuilder 笔

          本文链接:https://www.haomeiwen.com/subject/weszvttx.html