TextView部分文字上色,并为其添加监听
2018-02-05 本文已影响10人
zhengLH
【需求】如下图,点击红色字体,实现逻辑跳转?
效果图.png【实现】
(1)Spannable 修改字体样式
(2)添加ClickableSpan监听
【核心代码】
String str = "有天我睡醒看到我的身边没有你"; // 哈哈这是《病变》其中一句歌词啦
SpannableString span = new SpannableString(str);
span.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
// 跳转逻辑;
Toast.makeText(SpannableActivity.this,"我被点击了",
Toast.LENGTH_SHORT).show();
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void updateDrawState(TextPaint ds) {
// super.updateDrawState(ds);
//去掉下划线
ds.setUnderlineText(true);
//去掉点击背景色
// ds.bgColor = getColor(R.color.colorWhite);
// 距离文本基线的距离
// ds.baselineShift = 20;
}
}, 7, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new ForegroundColorSpan(getColor(R.color.colorAccent)),7, str.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvContent.setText(span);
mTvContent.setMovementMethod(LinkMovementMethod.getInstance());
【xml 布局文件】
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:id="@+id/tv_content"
android:padding="@dimen/padding_15dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/spanable_content"/>
</android.support.v7.widget.LinearLayoutCompat>
【其他友情链接】http://blog.csdn.net/u010231625/article/details/70483615