这是在一个TetView中显示不同样式文本的工具类

这是在一个TetView中显示不同样式文本的工具类

public class SpannableWrap {
    public static SpannableConfig setText(String text) {
        return new SpannableConfig(text);
    }

    public static class SpannableConfig {
        private List<SpannableString> mSpannableStringList;
        private SpannableString mCurrentString;
        private boolean mNeedMoveMethod = false;

        private SpannableConfig(String text) {
            if (mSpannableStringList == null) {
                mSpannableStringList = new ArrayList<>();
            }
            mCurrentString = new SpannableString(text);
            mSpannableStringList.add(mCurrentString);
        }

        /**
         * 拼接下一段文字
         *
         * @param text
         * @return
         */
        public SpannableConfig append(String text) {
            mCurrentString = new SpannableString(text);
            mSpannableStringList.add(mCurrentString);
            return this;
        }

        /**
         * 字体颜色
         *
         * @param color
         * @return
         */
        public SpannableConfig textColor(int color) {
            ForegroundColorSpan span = new ForegroundColorSpan(color);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 背景颜色
         *
         * @param color
         * @return
         */
        public SpannableConfig backgroundColor(int color) {
            BackgroundColorSpan span = new BackgroundColorSpan(color);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 粗体
         *
         * @return
         */
        public SpannableConfig bold() {
            StyleSpan span = new StyleSpan(Typeface.BOLD);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 斜体
         *
         * @return
         */
        public SpannableConfig italic() {
            StyleSpan span = new StyleSpan(Typeface.ITALIC);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 粗斜体
         *
         * @return
         */
        public SpannableConfig bloditalic() {
            StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 设置图片
         *
         * @return
         */
        public SpannableConfig image(@DrawableRes int drawableId, Context context) {
            Drawable drawable = context.getResources().getDrawable(drawableId);
            image(drawable);
            return this;
        }

        /**
         * 设置图片
         *
         * @return
         */
        public SpannableConfig image(Drawable drawable) {
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
            ImageSpan span = new ImageSpan(drawable);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍  ,0.5表示一半
         *
         * @param proportion
         * @return
         */
        public SpannableConfig relativeSize(float proportion) {
            RelativeSizeSpan span = new RelativeSizeSpan(proportion);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 设置字体大小
         *
         * @param size  像素/DIP
         * @param isDip
         * @return
         */
        public SpannableConfig size(int size, boolean isDip) {
            AbsoluteSizeSpan span = new AbsoluteSizeSpan(size, isDip);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 设置字体大小
         *
         * @param size    像素/DIP
         * @param context
         * @return
         */
        public SpannableConfig sizeSp(int size, Context context) {
            AbsoluteSizeSpan span = new AbsoluteSizeSpan(DisplayUtil.sp2px(context, size), false);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 下划线
         *
         * @return
         */
        public SpannableConfig underline() {
            UnderlineSpan span = new UnderlineSpan();
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return this;
        }

        /**
         * 超链接
         *
         * @return
         */
        public SpannableConfig url(URLType type, String url) {
            URLSpan span = new URLSpan(type + url);
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mNeedMoveMethod = true;
            return this;
        }

        public SpannableConfig onclick(View.OnClickListener onClickListener, boolean underLine) {
            ClickableSpan span = new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    onClickListener.onClick(widget);
                }

                @Override
                public void updateDrawState(TextPaint ds) {
                    ds.setColor(ds.linkColor);
                    ds.setUnderlineText(underLine);
                }
            };
            mCurrentString.setSpan(span, 0, mCurrentString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mNeedMoveMethod = true;
            return this;
        }


        public void into(TextView textView) {
            textView.setText("");
            for (SpannableString string : mSpannableStringList) {
                textView.append(string);
            }

            if (mNeedMoveMethod) {
                textView.setMovementMethod(LinkMovementMethod.getInstance());
            }
        }
    }

    public enum URLType {

        TELEPHONE("tal:"),
        EMAIL("mailto:"),
        WEB(""),
        /**
         * 短信
         */
        SMS("sms:"),
        /**
         * 彩信
         */
        MMS("mms:"),
        MAP("geo:");
        private String mMethod;

        URLType(String method) {
            mMethod = method;
        }

        @Override
        public String toString() {
            return mMethod;
        }
    }
}

使用方式

  SpannableWrap.setText(mView.getResources().getString(R.string.yue)).sizeSp(12, mView.getContext()).
                textColor(ContextCompat.getColor(mView.getContext(), R.color.text_black))
                .append(String.format(Locale.CHINA, "%.01f", total)).sizeSp(25, mView.getContext()
        ).textColor(ContextCompat.getColor(mView.getContext(), R.color.text_orange))
                .append(mView.getResources().getString(R.string.yuan)).sizeSp(12, mView.getContext()).
                textColor(ContextCompat.getColor(mView.getContext(), R.color.text_black))
                .into(mTvPrice);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值