SpannableStringUtil实现丰富文字效果

前言

在android开发中,我们不免会用到 TextView 的各种显示效果,如字体样式,颜色,大小,背景等。今天要讲的就是这么一个工具类SpannableStringUtil,方便快捷的实现各种文字效果。

今天涉及的内容有:

  1. SpannableString"截取"基本介绍
  2. SpannableStringUtil的各种特效使用介绍
  3. SpannableStringUtil的综合使用
  4. SpannableStringUtil源码

先上张效果图


1.png
一. SpannableString"截取"基本介绍

SpannableString设置样式的时候,涉及到下标"截取"样式的问题,其"截取"样式分以下四种:

  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE: (start,end) --- 前后下标都不包括
  Spanned.SPAN_EXCLUSIVE_INCLUSIVE: (start,end] --- 前面不包括,后面包括
  Spanned.SPAN_INCLUSIVE_EXCLUSIVE: [start,end) --- 前面包括,后面不包括
  Spanned.SPAN_INCLUSIVE_INCLUSIVE: [start,end] --- 前后都包括
二. SpannableStringUtil的各种特效使用介绍
2.01 设置字体大小
        //设置字体大小
        String textSizeStr="设置字体大小";
        String textSizeChar="字体";
        SpannableString textSizeSp=SpannableStringUtil.setTextSize(textSizeStr,textSizeChar,1.5f);
        mTvTextSize.setText(textSizeSp);
2.02 设置文字前景色
        //设置文字前景色
        String textFrontColorStr="设置文字前景色";
        String textFrontColorChar="前景色";
        SpannableString textFrontColorSp=SpannableStringUtil.setTextFrontColor(textFrontColorStr,textFrontColorChar,R.color.red);
        mTvTextFrontColor.setText(textFrontColorSp);
2.03 设置背景色
        //设置背景色
        String textBgColorStr="设置背景色";
        String textBgColorChar="背景色";
        SpannableString textBgColorSp=SpannableStringUtil.setTextBackgroundColor(textBgColorStr,textBgColorChar,R.color.blue);
        mTvTextBgColor.setText(textBgColorSp);
2.04 设置字体样式
        String textStyleStr="设置字体样式,普通,粗体,斜体,粗斜体,写完了";
        String textStyleOneChar="普通";
        String textStyleTwoChar="粗体";
        String textStyleThreeChar="斜体";
        String textStyleFourChar="粗斜体";
        SpannableString oneSp=SpannableStringUtil.setTextStyle(textStyleStr,textStyleOneChar, Typeface.NORMAL);
        SpannableString twoSp=SpannableStringUtil.setTextStyle(oneSp,textStyleTwoChar, Typeface.BOLD);
        SpannableString threeSp=SpannableStringUtil.setTextStyle(twoSp,textStyleThreeChar, Typeface.ITALIC);
        SpannableString fourSp=SpannableStringUtil.setTextStyle(threeSp,textStyleFourChar, Typeface.BOLD_ITALIC);
        mTvTextStyle.setText(fourSp);
2.05 设置文字划线
        String textLineStr="设置文字划线,下划线和中划线,写完了";
        String textLineOneChar="下划线";
        String textLineTwoChar="中划线";
        SpannableString onefSp=SpannableStringUtil.setTextLine(textLineStr,textLineOneChar,false);
        SpannableString twofSp=SpannableStringUtil.setTextLine(onefSp,textLineTwoChar,true);
        mTvTextLine.setText(twofSp);
2.06 设置内容上角标,下角标

注意mTvTextMark要设置足够的paddingTop和paddingBottom,不然上下标会显示不全

        //设置内容上角标,下角标
        //注意mTvTextMark要设置足够的paddingTop和paddingBottom,不然上下标会显示不全
        String textMarkStr="设置文字上角标和文字下角标";
        String textMarkOneChar="上角标";
        String textMarkTwoChar="下角标";
        SpannableString oneMarkSp=SpannableStringUtil.setTextMark(textMarkStr,textMarkOneChar,true);
        SpannableString twoMarkSp=SpannableStringUtil.setTextMark(oneMarkSp,textMarkTwoChar,false);
        mTvTextMark.setText(twoMarkSp);
2.07 设置内容沿x方向拉伸
        String textXStr="设置内容沿x方向拉伸";
        String textXChar="x方向拉伸";
        SpannableString xSp=SpannableStringUtil.setTextScaleX(textXStr,textXChar,2f);
        mTvTextXscale.setText(xSp);
2.08 左侧右侧插入图片
        String pictureStr="设置左侧和右侧插入图片";
        String pictureOneChar="左";
        String pictureTwoChar="右";
        SpannableString pictureOneSp=SpannableStringUtil.setTextLeftImage(pictureStr,pictureOneChar,R.mipmap.ic_check);
        SpannableString pictureTwoSp=SpannableStringUtil.setTextRightImage(pictureOneSp,pictureTwoChar,R.mipmap.ic_check);
        mTvPicture.setText(pictureTwoSp);
2.09 将文字替换成图片
        String replaceStr="将文字替换成图片";
        String replaceChar="文字";
        SpannableString replaceSp=SpannableStringUtil.replaceTextByImage(replaceStr,replaceChar,R.mipmap.ic_check);
        mTvReplaceByImage.setText(replaceSp);
2.10 设置可点击
        //设置可点击
        String clickableStr="我是可以点击的";
        String clickableChar="点击";
        SpannableString clickableSp=SpannableStringUtil.setClickText(clickableStr, clickableChar, R.color.red, false, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showShort("我被点击了");
            }
        });
        mTvTextClick.setText(clickableSp);
        //必须设置才能响应点击事件
        mTvTextClick.setMovementMethod(LinkMovementMethod.getInstance());
2.11 打电话
        //打电话
        String callStr="电话号码:13721057328";
        String callChar="13721057328";
        SpannableString callSp=SpannableStringUtil.callUp(callStr,callChar,callChar);
        mTvTextCall.setText(callSp);
        //必须设置才能响应点击事件
        mTvTextCall.setMovementMethod(LinkMovementMethod.getInstance());
2.12 发邮件,短信,彩信
        //发邮件,短信,彩信
        String functionStr="发邮件,短信,彩信";
        String emailChar="邮件";
        String smsChar="短信";
        String mmsChar="彩信";
        String functionEmail="125489713@qq.com";
        String functionPhone="13721057328";
        SpannableString  functionSp1=SpannableStringUtil.sendEmail(functionStr,functionEmail,emailChar);
        SpannableString  functionSp2=SpannableStringUtil.sendSMS(functionSp1,functionPhone,smsChar);
        SpannableString  functionSp3=SpannableStringUtil.sendMMS(functionSp2,functionPhone,mmsChar);
        mTvTextFunction.setText(functionSp3);
        //必须设置才能响应点击事件
        mTvTextFunction.setMovementMethod(LinkMovementMethod.getInstance());
2.13 打开地图,网页和超链接
        String geoStr="打开地图,网页和超链接";
        String longitude="121.4";//经度
        String latitude="121.4";//纬度
        SpannableString geoSp=SpannableStringUtil.sendGEO(geoStr,longitude,latitude,"地图");
        SpannableString webSp=SpannableStringUtil.openWeb(geoSp,"http://www.baidu.com","网页");
        SpannableString urlSp=SpannableStringUtil.setTextURL(webSp,"http://www.baidu.com","超链接");
        mTvTextGEO.setText(urlSp);
        //必须设置才能响应点击事件
        mTvTextGEO.setMovementMethod(LinkMovementMethod.getInstance());
2.14 设置项目符号
        //设置项目符号
        String itemStr="设置项目符号";
        SpannableString itemSp=SpannableStringUtil.setTextItem(itemStr,10,R.color.black,itemStr);
        mTvTextItem.setText(itemSp);
2.15 设置字体模糊ABCD和浮雕效果

注:设置浮雕效果需要在对应的mainfast的activity中添加android:hardwareAccelerated="false"

        String effectStr="设置字体模糊ABCD和浮雕效果";
        SpannableString defultEffectSp=SpannableStringUtil.setTextFuzzy(effectStr,10, BlurMaskFilter.Blur.NORMAL,"A");
        SpannableString innerEffectSp=SpannableStringUtil.setTextFuzzy(defultEffectSp,10, BlurMaskFilter.Blur.INNER,"B");
        SpannableString outerEffectSp=SpannableStringUtil.setTextFuzzy(innerEffectSp,10, BlurMaskFilter.Blur.OUTER,"C");
        SpannableString solidEffectSp=SpannableStringUtil.setTextFuzzy(outerEffectSp,10, BlurMaskFilter.Blur.SOLID,"D");
        //设置浮雕效果需要在对应的mainfast的activity中添加android:hardwareAccelerated="false"
        SpannableString reliefEffectSp=SpannableStringUtil.setTextRelief(solidEffectSp,new float[]{10, 10, 10}, 0.5f, 1f, 1f,"浮雕");
        mTvTextEffect.setText(reliefEffectSp);

在mainfast中加入配置代码如下:

   <activity android:name=".MainActivity"
            android:hardwareAccelerated="false">
            //以下代码省略
            //......
        </activity>
三. SpannableStringUtil的综合使用

下面以实现有新消息展示有圆点为例:
实现代码如下:

        //综合使用,展示新消息小圆点
        String pointStr="新消息•";
        String pointFrontColorChar="•";
        SpannableString pointSizeSp=SpannableStringUtil.setTextSize(pointStr,pointFrontColorChar,2.2f);
        SpannableString pointFrontColorSp=SpannableStringUtil.setTextFrontColor(pointSizeSp,pointFrontColorChar,R.color.red);
        mTvTextPoint.setText(pointFrontColorSp);

效果图


image.png
四. SpannableStringUtil源码

下面贴出SpannableStringUtil类源码

还有 84% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
支付 ¥2.00 继续阅读
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容