android-tip-关于SpannableString的使用
2016-02-28 00:17
393 查看
如果想单独设置TextView上其中几个字的样式,该怎么办?
答案是使用SpannableString。
使用SpannableString可以为TextView上的某字或某些字设置:
前景色(ForegroundColorSpan)、
背景色(BackgroundColorSpan)、
设置字体(TypefaceSpan)、
点击事件(ClickableSpan)、
设置掩码(MaskFilterSpan)、
删除线效果(StrikethroughSpan)、
下划线效果(UnderlineSpan)、
插入图片(ImageSpan)等
想要实现自定义的样式,查看这个文档:
http://developer.android.com/reference/android/text/style/CharacterStyle.html
1. 简单示例
设置文字的前景色 1 SpannableString name = new SpannableString("abc");
ForegroundColorSpan nameSpan = new ForegroundColorSpan(Color.BLUE);
name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(name);
例如,我们写一个聊天程序,需要将用户名设置成绿色,将聊天内容设置成红色,可以这么干: 1 SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
2 // name
3 SpannableString name = new SpannableString("name");
4 ForegroundColorSpan nameSpan = new ForegroundColorSpan(Color.BLUE);
5 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
6 spanBuilder.append(name);
7
8 // msg
9 SpannableString msg = new SpannableString("msg");
ForegroundColorSpan msgSpan = new ForegroundColorSpan(Color.RED);
msg.setSpan(msgSpan, 0, msg.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spanBuilder.append(msg);
14 textView.setText(spanBuilder);
3. 插入图片
4. 为文字设置点击事件
如果我们需要问某个字或某几个字设置点击事件,可以这么干: 1 // name
2 ClickableSpan clickSpan = new ClickableSpan() {
3
4 @Override
5 public void onClick(View widget) {
6 Toast.makeText(context, "clickspan", Toast.LENGTH_LONG).show();
7 }
8 @Override
9 public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// 去掉下划线
ds.setUnderlineText(false);
// 设置文字颜色
ds.setColor(Color.BLUE);
}
};
SpannableString name = new SpannableString(cmd.srcName() + ":");
name.setSpan(clickSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
22 textView.setText(name);
答案是使用SpannableString。
使用SpannableString可以为TextView上的某字或某些字设置:
前景色(ForegroundColorSpan)、
背景色(BackgroundColorSpan)、
设置字体(TypefaceSpan)、
点击事件(ClickableSpan)、
设置掩码(MaskFilterSpan)、
删除线效果(StrikethroughSpan)、
下划线效果(UnderlineSpan)、
插入图片(ImageSpan)等
想要实现自定义的样式,查看这个文档:
http://developer.android.com/reference/android/text/style/CharacterStyle.html
1. 简单示例
设置文字的前景色 1 SpannableString name = new SpannableString("abc");
ForegroundColorSpan nameSpan = new ForegroundColorSpan(Color.BLUE);
name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(name);
2. 使用SpannableStringBuilder构造复杂的样式
例如,我们写一个聊天程序,需要将用户名设置成绿色,将聊天内容设置成红色,可以这么干: 1 SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
2 // name
3 SpannableString name = new SpannableString("name");
4 ForegroundColorSpan nameSpan = new ForegroundColorSpan(Color.BLUE);
5 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
6 spanBuilder.append(name);
7
8 // msg
9 SpannableString msg = new SpannableString("msg");
ForegroundColorSpan msgSpan = new ForegroundColorSpan(Color.RED);
msg.setSpan(msgSpan, 0, msg.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spanBuilder.append(msg);
14 textView.setText(spanBuilder);
3. 插入图片
// image SpannableString image = new SpannableString("image"); ImageSpan imageSpan = new ImageSpan(ctx, imageResourceId, DynamicDrawableSpan.ALIGN_BASELINE); image.setSpan(imageSpan, 0, image.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(image);
4. 为文字设置点击事件
如果我们需要问某个字或某几个字设置点击事件,可以这么干: 1 // name
2 ClickableSpan clickSpan = new ClickableSpan() {
3
4 @Override
5 public void onClick(View widget) {
6 Toast.makeText(context, "clickspan", Toast.LENGTH_LONG).show();
7 }
8 @Override
9 public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// 去掉下划线
ds.setUnderlineText(false);
// 设置文字颜色
ds.setColor(Color.BLUE);
}
};
SpannableString name = new SpannableString(cmd.srcName() + ":");
name.setSpan(clickSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
22 textView.setText(name);
注意:默认状态下,TextView不会响应点击事件,还需要这么设置一下:
txtView.setMovementMethod(LinkMovementMethod.getInstance());
相关文章推荐
- Android中EditText的字数统计
- Mac下配置android环境变量
- 4.4.1 Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android 返回桌面的操作
- Android 富文本编辑器 图文混排
- Android系统启动时添加运行脚本
- Android控件默认颜色与背景颜色相同导致显示问题
- Android按键映射
- android studio gradle 多版本多apk打包(打包系列教程之五)
- Android系统之G-sensor
- android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity
- Android数据库更新并保留原来数据的实现
- Android学习笔记之Service
- android 群英传 的刮刮卡demo 心得
- Error: Error parsing D:\Android\sdk\system-images\android-23\android-wear\x86\devices.xml
- Android学习笔记day8
- Android中Service与IntentService的使用比较
- Android 中的接口回调
- AndroidAnnotations开源框架
- 广师Android群分享集合之Android源码学习