今天在写项目的时候碰到了一个TextView的需求,它长这个样子
看到之后最简单的就是写两个TextView
或者通过Html标签搞定
今天我们换一种方式,使用系统的 SpannableStringBuilder搞定
话不多说,上代码
第一种简单的实现样式
Kotlin写法,项目其他地方用法 上来补充
var span = SpannableString("已生成二维码,点击保存")
span.setSpan(ForegroundColorSpan(Color.parseColor("#DB6579")), span.length - 4, span.length, Spanned.SPAN_EXCLUSIVE_INCLUSIVE)
message_new_count_tv.text = span
Java写法
SpannableString span=new SpannableString("已生成二维码,点击保存");
span.setSpan(new ForegroundColorSpan(Color.parseColor("#DB6579")), span.length - 4, span.length, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
message_new_count_tv.setText(span);
第二种带上点击事件
String str = "已生成二维码,点击保存";
//这个是为了设置点击后 文字变色情况
qr_code_onclick_tv.setHighlightColor(getResources().getColor(android.R.color.transparent));
SpannableStringBuilder style = new SpannableStringBuilder(str);
//设置部分文字点击事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(QRCodeActivity.this, "触发点击事件!", Toast.LENGTH_SHORT).show();
((TextView) widget).setHighlightColor(getResources().getColor(android.R.color.transparent));
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);//用于设置你的文字什么颜色
ds.setColor(Color.parseColor("#DB6579"));
ds.setUnderlineText(false);
ds.clearShadowLayer();
}
};
style.setSpan(clickableSpan, str.length() - 4, str.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
qr_code_onclick_tv.setText(style);
qr_code_onclick_tv.setMovementMethod(LinkMovementMethod.getInstance());
复杂一点,可以设置背景和图片的请跳转链接
好了试一下效果吧!