经常会遇到一个TextView部分变色,部分文字还要响应点击事件。情况如下:
废话不多说直接上代码:
SpannableString spanableInfo = new SpannableString(tvTest.getText().toString().trim());
spanableInfo.setSpan(new Clickable(clickListener), 28, 31, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvTest.setText(spanableInfo);
tvTest.setMovementMethod(LinkMovementMethod.getInstance());
其中要创建ClickableSpan的继承类如下:
class Clickable extends ClickableSpan {
private final View.OnClickListener mListener;
public Clickable(View.OnClickListener l) {
mListener = l;
}
/**
* 重写父类点击事件
*/
@Override
public void onClick(View v) {
mListener.onClick(v);
}
/**
* 重写父类updateDrawState方法 我们可以给TextView设置字体颜色,背景颜色等等...
*/
@Override
public void updateDrawState(TextPaint ds) {
//TextPaint继承Paint,可以设置更多熟悉
ds.setColor(getResources().getColor(R.color.red));
ds.setTextSize(100);
}
}
而构造方法要添加监听,所以再写一个监听如下,响应部分文字点击事件:
private View.OnClickListener clickListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(PersonActivity.this, "测试点击", Toast.LENGTH_SHORT).show();
}
};
效果就完成了。