编程语言
首页 > 编程语言> > Android实战篇 阅读并同意“用户协议”与“隐私政策” 【Kotiln / Java】

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设置样式——字体颜色
     */
    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篇- 实现

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
    }
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