一需求
每一个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=new SpannableString("已阅读同意用户协议和隐私条款");
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
}
},5,14,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(getColor(R.color.colorPrimaryDark)),5,14,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
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空间点赞和点赞人的显示
|