SpannableString操作类

SpannableString操作类

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextPaint;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.LeadingMarginSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.TypefaceSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;

public class SpannableStringUtil {

    /**
     * ForegroundColorSpan 文本颜色
     * @param tv TextView对象
     * @param str 文本内容
     * @param color 文本颜色
     */
    public static void setForegroundColorSpan(TextView tv, String str, int color) {
        SpannableString spanString = new SpannableString(str);
        ForegroundColorSpan span = new ForegroundColorSpan(color);
        spanString.setSpan(span, 0, str.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * BackgroundColorSpan 文本背景色
     * @param tv TextView对象
     * @param str 文本内容
     * @param color 文本背景色
     */
    public static void setBackgroundColorSpan(TextView tv, String str, int color) {
        SpannableString spanString = new SpannableString(str);
        BackgroundColorSpan span = new BackgroundColorSpan(color);
        spanString.setSpan(span, 0, str.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * StyleSpan 字体样式:粗体、斜体等
     * @param tv TextView对象
     * @param str 文本内容
     * @param style 字体样式
     */
    public static void setStyleSpan(TextView tv, String str, int style) {
        SpannableString spanString = new SpannableString(str);
        StyleSpan span = new StyleSpan(style);
        spanString.setSpan(span, 0, str.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * RelativeSizeSpan  相对大小
     * @param tv TextView对象
     * @param str 文本内容
     * @param proportion 相对大小倍数
     */
    public static void setRelativeFontSpan(TextView tv, String str,float proportion) {
        SpannableString spanString = new SpannableString(str);
        spanString.setSpan(new RelativeSizeSpan(proportion), 0, str.length(),
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * TypefaceSpan   文本字体
     * @param tv TextView对象
     * @param str 文本内容
     * @param typefaceSpan 文本字体
     */
    public static void setTypefaceSpan(TextView tv, String str, String typefaceSpan) {
        SpannableString spanString = new SpannableString(str);
        spanString.setSpan(new TypefaceSpan(typefaceSpan), 0, str.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * URLSpan 文本超链接
     * @param tv TextView对象
     * @param str 文本内容
     * @param url 超链接地址
     */
    public static void addUrlSpan(TextView tv, String str, String url) {
        SpannableString spanString = new SpannableString(str);
        URLSpan span = new URLSpan(url);
        spanString.setSpan(span, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * ImageSpan  图片
     * @param tv TextView对象
     * @param str 文本内容
     * @param drawable 图片
     */
    public static void addImageSpan(TextView tv, String str, Drawable drawable) {
        SpannableString spanString = new SpannableString(str);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight());
        ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
        spanString.setSpan(span, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }


	/**
     * UnderlineSpan 下划线
     * @param tv TextView对象
     * @param str 文本内容
     */
    public static void addUnderLineSpan(TextView tv, String str) {
        SpannableString spanString = new SpannableString(str);
        UnderlineSpan span = new UnderlineSpan();
        spanString.setSpan(span, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * StrikethroughSpan 删除线
     * @param tv TextView对象
     * @param str 文本内容
     */
    public static void addStrikeSpan(TextView tv, String str) {
        SpannableString spanString = new SpannableString(str);
        StrikethroughSpan span = new StrikethroughSpan();
        spanString.setSpan(span, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
     * @param tv TextView对象
     * @param str 文本内容
     * @param textAppearanceSpan 文本外貌
     */
    public static void setTextAppearanceSpan(TextView tv, String str,
                                             TextAppearanceSpan textAppearanceSpan) {
        SpannableString spanString = new SpannableString(str);
        spanString.setSpan(textAppearanceSpan, 0, str.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.append(spanString);
    }

    /**
     * 计算textView中文字的长度(像素Px)
     * @param textView textView对象
     * @param text 文本
     * @return 长度
     */
    public static int getTextViewLength(TextView textView, String text) {
        TextPaint paint = textView.getPaint();
        // 得到使用该paint写上text的时候,像素为多少
        return (int) paint.measureText(text);
    }

    /**
     * 设置缩进以及文本颜色
     * @param textView textView对象
     * @param str 文本
     * @param startPx 文本首行缩进
     * @param endPx 文本剩余行缩进
     * @param color 文本颜色
     *   SpannableString.setSpan(what,start,end,flags);
     *   进行样式的设置了,其中参数what是具体样式的实现对象,start则是该样式开始的位置,end对应的是样式结束的位置,参数flags,定义在Spannable中的常量
     */
    public static void SetTextRetract(TextView textView, String str, int startPx, int endPx, int color) {
        SpannableString spannableString = new SpannableString(str);
        //设置文本颜色
        ForegroundColorSpan span = new ForegroundColorSpan(color);
        spannableString.setSpan(span, 0, spannableString.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文本缩进的样式,参数arg0,首行缩进的像素,arg1,剩余行缩进的像素
        LeadingMarginSpan.Standard what = new LeadingMarginSpan.Standard(startPx, endPx);
        spannableString.setSpan(what, 0, spannableString.length(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
        textView.append(spannableString);
    }

    /**
     * 获取view中的组件的最大宽度
     * @param view view对象
     * @return 宽度
     */
    public static int GetMaxWidth(Activity activity, View view) {
        //获取屏幕宽度
        WindowManager manager = activity.getWindowManager();
        DisplayMetrics outMetrics = new DisplayMetrics();
        if (manager != null) {
            manager.getDefaultDisplay().getMetrics(outMetrics);
        }
        int width = outMetrics.widthPixels;
        //获取view的paddingLeft、paddingRight
        int paddingLeft = view.getPaddingLeft();
        int paddingRight = view.getPaddingRight();
        return width - paddingLeft - paddingRight;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值