废话不多说,直接贴源码!让TextView 里面文本享有不同的点击效果!比如点击名字跳转到个人空间,点击评论回复评论!至于要想拿到文本 id,自己设置控件的tag标签解决!
public class MainActivity extends Activity {
TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textview = (TextView) findViewById(R.id.hello);
textview.setClickable(true);
textview.setText(getClickableSpan());
textview.setLinkTextColor(Color.TRANSPARENT);
textview.setMovementMethod(LinkMovementMethod.getInstance());
}
private SpannableString getClickableSpan() {
View.OnClickListener l = new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Click Success 1",
Toast.LENGTH_SHORT).show();
}
};
View.OnClickListener ll = new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Click Success 2",
Toast.LENGTH_SHORT).show();
}
};
String temp = "王二麻";
String text = "hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!hi,你好!!!!";
String name = temp+":";
SpannableString spanableInfo = new SpannableString(name+text);
ClickableSpan clickable = new NoLineClickSpan(name,l);
spanableInfo.setSpan(clickable, 0, name.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ClickableSpan textClickable = new NoLineClickSpan(text,ll);
spanableInfo.setSpan(textClickable, name.length(), name.length()+text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spanableInfo.setSpan(new ForegroundColorSpan(Color.BLUE), 0, name.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spanableInfo.setSpan(new ForegroundColorSpan(Color.BLACK), name.length(), name.length()+text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanableInfo;
}
}
public class NoLineClickSpan extends ClickableSpan {
String text;
View.OnClickListener l;
public NoLineClickSpan(String text,View.OnClickListener l) {
super();
this.text = text;
this.l = l;
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);//设置颜色
ds.setUnderlineText(false);
}
@Override
public void onClick(View v) {
l.onClick(v);
}
}