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

本文介绍如何在Android应用中为TextView内的不同文本设置点击效果,例如点击特定文本跳转到相应页面。通过使用SpannableString结合ClickableSpan,可以轻松实现文本级别的交互功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值