最近4个月都在忙一个项目,最近项目接近尾声,所有打算趁这个机会稍微做一点总结。
本次总结的功能是实现一段文字,部分文字颜色不同,部分文字有下划线并且可以点击,主要的思路就是使用SpannableString,自定义一个ClickableSpan。以下就是实现该功能的具体步骤以及相关代码。
1.自定义ClickableSpan,通过不同的type去判断文字显示的颜色以及下划线显示状况。
public abstract class ClickableColorSpan extends ClickableSpan {
private int type;
public ClickableColorSpan(int type) {
// this.str = str;
this.type = type;
}
@Override
public void updateDrawState(TextPaint ds) {
if (type == Constants.NOTHING)// 空格情况
{
// ds.setColor(ds.linkColor);
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(ds.linkColor);
ds.setColor(getActivity().getResources().getColor(
R.color.linkcolor));
ds.setUnderlineText(true);
}
if (type == Constants.SELECTED)// 非空格选择
{
// ds.setColor(ds.linkColor);
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());