Android实战篇 阅读并同意“用户协议”与“隐私政策” 【Kotiln / Java】
作者:互联网
一、前言:SpannableStringBuilder
1、SpannableStringBuilder和SpannableString的区别类似与StringBuilder、String
2、SpannableStringBuilder可以拼接,而SpannableString不可拼接
二、主要方法
SpannableStringBuilder和SpannableString主要通过使用setSpan(Object what, int start, int end, int flags)改变文本样式
三、对应参数
start: 指定Span的开始位置
end: 指定Span的结束位置,并不包括这个位置。
flags:取值有如下四个
Spannable. SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本不会应用该样式
Spannable. SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本也会应用该样式
Spannable. SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括
Spannable. SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括
what: 对应的各种Span,不同的Span对应不同的样式。已知的可用类有:
BackgroundColorSpan : 文本背景色
ForegroundColorSpan : 文本颜色
MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕
RasterizerSpan : 光栅效果
StrikethroughSpan : 删除线
SuggestionSpan : 相当于占位符
UnderlineSpan : 下划线
AbsoluteSizeSpan : 文本字体(绝对大小)
DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。
ImageSpan : 图片
RelativeSizeSpan : 相对大小(文本字体)
ScaleXSpan : 基于x轴缩放
StyleSpan : 字体样式:粗体、斜体等
SubscriptSpan : 下标(数学公式会用到)
SuperscriptSpan : 上标(数学公式会用到)
TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)
TypefaceSpan : 文本字体
URLSpan : 文本超链接
ClickableSpan : 点击事件
Java篇- 实现
- 例子一:仅修改字体颜色 : SpannableString
/**
* 使用SpannableString设置样式——字体颜色
*/
private void modemo() {
SpannableString spannableString = new SpannableString("请关注彭老希,我会持续更新喔");
//需要更改的颜色值
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#009ad6"));
// 0 , 8 需要改变字体颜色的index 坐标位置
spannableString.setSpan(colorSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//实现变色的文本视图
((TextView)findViewById(R.id.mode1)).setText(spannableString);
}
创建SpannableString的时候,传入需要显示的字符串。使用ForegroundColorSpan为文字设置颜色。
Kotiln篇- 实现
- 设置 SpannableStringBuilder
private fun setSpannableText(
style : SpannableStringBuilder
,start:Int,end:Int
,start2:Int,end2:Int): SpannableStringBuilder{
//设置服务协议点击事件
val serviceAgreement: ClickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
//往服务页面跳转
}
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.isUnderlineText = false
ds.color = ContextCompat.getColor(applicationContext,R.color.color_009af1)
}
}
//设置隐私政策点击事件
val privacyPolicy: ClickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
//往服务页面跳转
}
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.isUnderlineText = false
ds.color = ContextCompat.getColor(applicationContext,R.color.color_009af1)
}
}
style.setSpan(serviceAgreement, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
style.setSpan(privacyPolicy, start2, end2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
return style
}
- 设置 TextView
var style = SpannableStringBuilder()
style.append("我已阅读并同意《用户服务协议》及《隐私政策》")
style = setSpannableText(style,7,15,16,22)
//这一行必须要
readAgree.movementMethod = LinkMovementMethod.getInstance()
//赋值
readAgree.text = style
//设置高亮颜色透明,因为点击会变色
readAgree.highlightColor = ContextCompat.getColor(applicationContext,R.color.transparent)
标签:EXCLUSIVE,实战篇,Java,SpannableString,style,Kotiln,SpannableStringBuilder,文本,ds 来源: https://blog.csdn.net/weixin_44720673/article/details/115356891