SpannableStringUtil实现丰富文字效果
前言
在android开发中,我们不免会用到 TextView 的各种显示效果,如字体样式,颜色,大小,背景等。今天要讲的就是这么一个工具类SpannableStringUtil,方便快捷的实现各种文字效果。
今天涉及的内容有:
- SpannableString"截取"基本介绍
- SpannableStringUtil的各种特效使用介绍
- SpannableStringUtil的综合使用
- 效果图和项目结构图
注:文字效果的使用封装到SpannableStringUtil类中,具体使用大家可以参考demo,下面做具体介绍。
一. 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);
四.效果图和项目结构图
实现小圆点的效果图

整体效果图

项目结构图
SpannableStringUtil实现丰富文字效果
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
SpannableStringUtil实现丰富文字效果的更多相关文章
- Qt qml 模拟iphone slide to unlock 的聚光动画文字效果
模拟iphone slide to unlock 的聚光动画文字效果 /底层放淡文字 /前景放高亮文字+半透明遮罩 /动画移动遮罩 Author: surfsky.cnblogs.c ...
- as3.0:文字 效果
//文字描边效果var tf1 = _root.createTextField("tf1", _root.getNextHighestDepth(), 10, 10, 0, 0); ...
- CSS Gradient文字效果
你想创建的标题没有渲染和Photoshop每个标题吗?这里是一个简单的CSS技巧向您展示如何创建渐变文字效果,PNG图像(纯CSS,没有Javascript或Flash).你所需要的是一个空的< ...
- 如何通过PS制作图片文字效果
如图这是最终效果,下面我为大家介绍如何制作这种图片文字效果 准备一张图: 方法,步骤: 首先我们打开PHOTOSHOP,插入一张图片. 之后按键盘上面的"T"键快捷键启用文字工具, ...
- JAVA 跑马灯文字效果
JAVA跑马灯文字效果的实现: 1. 首先创建一个继承JFrame类的HorseRaceLightTextFrame窗体类,代码如下: package com.example.horseracelig ...
- 移动端 iphone锁屏文字效果
简易的仿照iphone 效果 笔记备份 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Conten ...
- 精通CSS+DIV网页样式与布局--CSS文字效果
上篇文章,小编简单的介绍了一下CSS的一些基本语法,学习内容不是很复杂,都是CSS的一些入门知识,但是万丈高楼平地起,搭好地基,高楼大厦不在话下,学习任何课程,都必须从基础开始,一步一个脚印,踏实坚定 ...
- CSS3动画:流彩文字效果+图片模糊效果+边框伸展效果实现
前言 首先第一步,先布局html代码如下: <div class="wrap"> <img src="images/1.jpg" class= ...
- CSS3下的渐变文字效果实现
如下,第一种方法已实践 一.方法一:借助mask-image属性 可以狠狠地点击这里:CSS3下的渐变文字效果方法一demo 如果您手头上的浏览器是Chrome或是Safari,则您可以在demo页面 ...
随机推荐
- GraphX中Pregel单源点最短路径(转)
原文链接:GraphX中Pregel单源点最短路径 GraphX中的单源点最短路径例子,使用的是类Pregel的方式. 核心部分是三个函数: 1.节点处理消息的函数 vprog: (VertexId ...
- uva 331 Mapping the Swaps 求交换排序的map 纯DFS
给出一个序列,每次交换两个数,求有几种交换方法能使序列变成升序. n不大于5,用dfs做. 代码: #include <cstdio> #include <cstring> # ...
- 【VC++积累】之八、PreTranslageMessage;TranslageMessage;GetMessage和PeekMessage的区别
先来看windows消息机制: 首先系统(也就是windows)把来自硬件(鼠标,键盘等消息)和来自应用程序的消息 放到一个系统消息队列中去. 而应用程序需要有自己的消息队列,也就是线程消息队列,每一 ...
- jboss中控制台jmx-console 登录的用户名和密码设置
默认情况访问 http://localhost:8080/jmx-console 就可以浏览jboss的部署管理的一些信息,不需要输入用户名和密码,使用起来有点安全隐患.下面我们针对此问题对jboss ...
- AltiumDesigner PCB布局布线过程与技巧
首先是原理图设计. 原理图设计是前期准备工作,对简单的板子,如果熟练流程,不妨可以跳过.但是对于初学者一定要按流程来,这样一方面可以养成良好的习惯,另一方面对复杂的电路也只有这样才能避免出错.在画原理 ...
- iOS开发-UITapGestureRecognizer手势
手势在iOS开发中是一个比较常用的功能,不过相对来说大家用的比较少,经常刷网易新闻,上次用了一下捏合手势才发现可以调整字体大小.昨天看到一个介绍摇一摇这个功能的,没看到之前一直都觉得摇一摇是微信的专有 ...
- IJPay 让支付触手可及-文中有视频
IJPay 让支付触手可及 GitHub:https://github.com/Javen205/IJPay Gitee:http://gitee.com/Javen205/IJPay JPay 是对 ...
- Python爬虫实战(一):爬糗事百科段子
代码: # _*_ coding:utf-8 _*_ import urllib2 import re from datetime import datetime class QSBK: def __ ...
- notepad++列块编辑操作
1. 同一时候编辑连续的列区域: 鼠标先在要进行列编辑的起点点击,再同一时候按shift+alt不放,鼠标在要进行列编辑的结尾区域点击. 2. 在起点到文档结尾全部列插入数据: 鼠标先在要插入数据的位 ...
- 配置windows失败,不能进入系统
曾经,遇到过<配置windows失败,还原更新,请勿关机>,可多次尝试都无效. 包括: 1. 安全模式(进不了系统) 2. 带命令的安全模式 3. 最后一次正确的配置 4 ...