原文地址:http://blog.csdn.net/xiaonadiandian/article/details/50477790
最近4个月都在忙一个项目,最近项目接近尾声,所有打算趁这个机会稍微做一点总结。
本次总结的功能是实现一段文字,部分文字颜色不同,部分文字有下划线并且可以点击,主要的思路就是使用SpannableString,自定义一个ClickableSpan。以下就是实现该功能的具体步骤以及相关代码。
1.自定义ClickableSpan,通过不同的type去判断文字显示的颜色以及下划线显示状况。
- public abstract class ClickableColorSpan extends ClickableSpan {
-
- private int type;
-
- public ClickableColorSpan(int type) {
-
- this.type = type;
- }
-
- @Override
- public void updateDrawState(TextPaint ds) {
- if (type == Constants.NOTHING)
- {
-
- ds.setColor(getActivity().getResources().getColor(
- R.color.linkcolor));
- ds.setUnderlineText(false);
- }
- if (type == Constants.DESCRIPTION)
- {
- ds.setColor(getActivity().getResources().getColor(
- R.color.orange));
- ds.setUnderlineText(false);
- }
- if (type == Constants.NORMAL)
- {
-
- ds.setColor(getActivity().getResources().getColor(
- R.color.linkcolor));
- ds.setUnderlineText(true);
- }
- if (type == Constants.SELECTED)
- {
-
- ds.setColor(getActivity().getResources().getColor(
- R.color.orange));
- ds.setUnderlineText(true);
- }
- }
- }
2.生成富文本
- private SpannableString getClickableSpan() {
- int start = 2;
- int end = 4;
- SpannableString spanableInfo = new SpannableString("hello word");
- spanableInfo.setSpan(
- new ClickableColorSpan(0) {
- @Override
- public void onClick(View v) {
-
- }
- }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- return spanableInfo;
- }
3.给控件赋值
- txtView.setText(getClickableSpan());
- txtView.setMovementMethod(LinkMovementMethod.getInstance());