android TextView文本处理封装

23人阅读 评论(0) 收藏 举报
public class TextEffectManager {
    /**
     int flags:取值有如下四个
     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE :前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
     Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
     Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
     Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。
     */

    /**
     * 修改字体颜色
     *
     * @param textView
     * @param text
     * @param start    其实下标,包括
     * @param end      结束下标,不包括
     * @param color
     */
    public static void makeTextColor(TextView textView, String text, int start, int end, int color) {
        SpannableString spanString = new SpannableString(text);
        spanString.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spanString);
    }

    //修改部分文字背景色
    public static void makeTextBg(TextView textView, String text, int start, int end, int color) {
        SpannableString spanString = new SpannableString(text);
        BackgroundColorSpan span = new BackgroundColorSpan(color);
        spanString.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spanString);
    }

    //设置部分文字字体大小
    public static void makeTextSize(TextView textView, String text, int start, int end, int size) {
        SpannableString spanString = new SpannableString(text);
        spanString.setSpan(new AbsoluteSizeSpan(size), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spanString);
    }

    //设置部分文字字体样式
    public static void makeTextStyle(TextView textView, String text, int start, int end, int style) {
        SpannableString spanString = new SpannableString(text);
        StyleSpan span = new StyleSpan(style);
        spanString.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spanString);
    }

    /**
     * 设置下划线
     *
     * @param textView
     */
    public static void makeUnderLine(TextView textView) {
        textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
    }

    //设置部分文字下划线
    public static void makeUnderLine(TextView textView, String text, int start, int end) {
        SpannableString spanString = new SpannableString(text);
        UnderlineSpan span = new UnderlineSpan();
        spanString.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spanString);
    }

    //设置中划线
    //priceOldTv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
    //设置部分文字中划线
    public static void makeStrikethrough(TextView textView, String text, int start, int end) {
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        builder.setSpan(new StrikethroughSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(builder);
    }

    public static void makeTextSizeColor(TextView textView, String text, int start, int end, int color, int size) {
        SpannableString spanString = new SpannableString(text);
        spanString.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spanString.setSpan(new AbsoluteSizeSpan(size), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spanString);
    }

    /**
     * 处理html文本超链接点击事件
     * @param context
     * @param tv
     */
    public static void textHtmlClick(Context context, TextView tv, String color, boolean showLine) {
        tv.setMovementMethod(LinkMovementMethod.getInstance());
        CharSequence text = tv.getText();
        int end = text.length();
        Spannable sp = (Spannable) text;
        URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
        SpannableStringBuilder style = new SpannableStringBuilder(text);
        style.clearSpans();// should clear old spans
        for (URLSpan url : urls) {
            MyURLSpan myURLSpan = new MyURLSpan(context, url.getURL(), color, showLine);
            style.setSpan(myURLSpan, sp.getSpanStart(url),
                    sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        tv.setText(style);
    }

    private static class MyURLSpan extends ClickableSpan {
        String color;
        boolean showLine;
        Context context;
        String url;

        /**
         * @param context
         * @param url      链接
         * @param color    超链接文本颜色
         * @param showLine 是否显示下划线
         */
        MyURLSpan(Context context, String url, String color, boolean showLine) {
            this.context = context;
            this.url = url;
            this.color = color;
            this.showLine = showLine;
        }

        @Override
        public void onClick(View widget) {
            if (!TextUtils.isEmpty(url)) {
                Router.open(context, url);
            }
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            if (!TextUtils.isEmpty(color)) {
                ds.setColor(Color.parseColor(color));
            }
            ds.setUnderlineText(showLine);//是否显示下划线
        }
    }
}

查看评论

封装原生TextView

MainActivity :package com.testui; import com.facebook.react.ReactActivity; import com.facebook.react...
  • u014041033
  • u014041033
  • 2016-02-29 16:11:18
  • 531

Android-万能 Adapter 封装(实现textview,imageView 的简单封装,封装 jar 包)

1.回顾   上篇学习了 图片预览的实现(自定义imageview实现);最后 封装为jar包,方便使用; 2.重点   (1)ViewHolder封装   (2)CommonAdapter封...
  • LABLENET
  • LABLENET
  • 2015-09-11 14:10:52
  • 1092

Android封装TextView内容伸缩工具

相信大家经常看见下面的实现效果: 如果想要实现上面的效果,那么就要分下面几步: 1、判断文字内容有没有超过指定行数的高度,如果超过了显示伸展箭头,如果没超过则隐藏箭头; ...
  • cc_lova_wxf
  • cc_lova_wxf
  • 2015-10-23 15:25:23
  • 982

android TextView android TextView

  • 2014年06月17日 23:39
  • 2KB
  • 下载

Android千变万化TextView(SpannableString全解析)

上一篇博客讲了怎么用SpannableString实现表情、文字混合显示的EditText和TextView。 其实显示表情只是SpannableString的一个小功能,它的强大之处今天将完全展示...
  • u011002668
  • u011002668
  • 2016-03-16 20:53:26
  • 879

TextView + Spanned实现图文混排以及图片点击交互

最近要实现图文混排的需求,webview过大,所以想到了用SpannableStringBuilder来实现。 不过参考了大量国内文章,大多数是教你如何实现图文混排,并没有提及图片点击交互的。有翻阅了...
  • wingichoy
  • wingichoy
  • 2016-09-28 09:37:57
  • 1669

Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件

目标:实现textview和ImageButton组合,可以通过Xml设置自定义控件的属性。        通过代码或者通过xml设置自定义控件的属性...
  • cxc19890214
  • cxc19890214
  • 2014-08-27 10:43:23
  • 1791

Android TextView指定关键字高亮显示

项目中有这个需求,网上搜了一把,方法挺多的,这里选择一个简单的,已验证可用的方法,记录下,方便以后查阅。 TextView tv = (TextView) findViewById(R.id.hel...
  • wblyuyang
  • wblyuyang
  • 2016-04-26 15:53:37
  • 2237
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 556
    排名: 9万+
    文章分类