Android 中对TextView文本多重点击-SpannableString

废话不多说,直接贴源码!让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);
}


}





你可能感兴趣的:(textview,SpannableString,文本内容点击)