Android中的SpannableString以及Pattern/Matcher的使用

在Android中有一个类叫做SpannableString,它具有很强大的替换功能,可以设置各种Span的字符串,比如常用的可以将TextView、EditText等中的文本替换为相应的图片、表情等显示出来。他自身还有很多属性可以进行相应的设置修改,比较灵活。

这里介绍他的几个常用属性,以及使用方式。

//设置前景色
ForegroundColorSpan(Color.GREEN)
//设置背景色

BackgroundColorSpan(Color.BLACK)
//设置图片

ImageSpan(context,resId)
//设置删除线
StrikeThroughSpan
//设置下划线
UnderlineSpan
//单独设置字体的大小
AbsoluteSizeSpan(size)
AbsoluteSizeSpan(size,flag) //flag为true表示 设置的字体大小单位为sp
//单独设置字体的样式
StyleSpan(style)

实例如下:

String string="请输入替换内容";
//根据String创建一个SpannableString
SpannableString ss=new SpannableString(string);
ss.setSpan(new ForegroundColorSpan(Color.GREEN), 3, 5, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new BackgroundColorSpan(Color.BLACK), 0, 3, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new ImageSpan(this, R.drawable.ue404), 5, 6, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new AbsoluteSizeSpan(20, true), 3, 5, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
et.setError(ss);
return true;


一般我们在多次需要使用该替换功能时,一般我们可以写一个工具类,在工具类中对该方法进行封装,使用时直接传参数调用即可,例如下面即是将TextView中的文本替换为图片ImageSpan的封装

public static SpannableString getSpannableString(String string){
//把形如[emo]ue058这样的内容替换为一个IamgeSpan
//ImageSpan中显示的图像时R.drawable.ue058
SpannableString ss=new SpannableString(string);
//Pattern  Matcher
Pattern pattern=Pattern.compile("\\[emo\\]ue[a-z0-9]{3}");
Matcher matcher=pattern.matcher(string);
while(matcher.find()){
int startIdx=matcher.start();
int endIdx=matcher.end();
String resId=matcher.group();
int id=MyApp.context.getResources().getIdentifier(resId.substring(5), "drawable", MyApp.context.getPackageName());
ss.setSpan(new ImageSpan(MyApp.context, id), startIdx, endIdx, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ss;
}

在这里我们还使用到了Android提供的另外两个类,Pattern 和 Matcher,这两个类是Android官方提供给我们进行进行字符串筛选匹配使用的。它两个是搭配使用的,其中Pattern.compile("\\[emo\\]ue[a-z0-9]{3}")括号中的内容为正则表达式,对我们需要获取的字符串进行筛选匹配,这里是匹配形如[emo]ue058的字符串,matcher常用方法一共就四个,如下:

matcher.find(); //返回true表示匹配成功,false表示无匹配项

matcher.start(); //匹配项的开始位置

matcher.end(); //匹配项的结束位置

matcher.group(); //获取匹配的字符串

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值