一需求
每一个app都需要做一个类似这个东西
二实现
1.可用使用控件拼接,嗯…不太行,手机设置调整字体大小和显示大小的时候,这时这两个控件的拼接就会出点问题
2.可用使用文本超链接点击textview的一部分字体,类似QQ空间或者微博高亮度字体的跳转
xml文件
<TextView
android:id="@+id/user_protocol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
/>
java代码
TextView user_protocol_ok=findViewById(R.id.user_protocol);
//创建一个SpannableString用来存放要显示的字符串
SpannableString spannableString=new SpannableString("已阅读同意用户协议和隐私条款");
//给5-14个字符串设置点击事件
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
//这写点击事件的逻辑
}
},5,14,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//给5-14个字符串设置文本颜色
spannableString.setSpan(new ForegroundColorSpan(getColor(R.color.colorPrimaryDark)),5,14,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//然后把spannableString放进到Text中,
user_protocol_ok.setText(spannableString);
//最后设置可点击
user_protocol_ok.setMovementMethod(LinkMovementMethod.getInstance());
这就实现了相关需求功能
三相关知识
SpannableString
实现效果时用到了这个类,它和Strings一样都是一种字符串类型,可用先设置好SpannableString 在把它放到TextView.set(SpannableString )中
使用spannableString.setSpan(Object what, int start, int end, int flags);方法可用设置许多不同的样式效果.
该方法的第一个参数就是所要设置的格式比如
ClickableSpan 就是点击事件
BackgroundColorSpan 看单词就知道背景色
ForegroundColorSpan 文本颜色
UnderlineSpan 下划线
URLSpan 文本超链接
RelativeSizeSpan 相对大小(和TextView原有的文字大小相对比)
AbsoluteSizeSpan 绝对大小(直接用具体数值指定文字大小)
SuperscriptSpan 上标
ImageSpan 插入图片
DynamicDrawableSpan 设置图片
…其他的请查阅API
第二个和第三个是字符串的起始下标和结束下标
第四个参数有四种选择
Spannable. SPAN_INCLUSIVE_EXCLUSIVE 在这段文本前部插入新的文本会应用该样式,而在文本后部插入新文本则不会应用该样式
Spannable. SPAN_INCLUSIVE_INCLUSIVE 在这段文本前部插入新的文本会应用该样式,在文本后部插入新文本也会应用该样式
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 比较常用,在这段文本前部插入新的文本不会应用该样式,在文本后部插入新文本也不会应用该样式
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 在这段文本前部插入新的文本不会应用该样式,在文本后部插入新文本会应用该样式
SpannableStringBuilder
String的拼接可用使用StringBuilder
SpannableString 也可以使用SpannableStringBuilder拼接实现 QQ空间点赞和点赞人的显示