【SpannableString和隐私政策的实现】

通过SpannableString实现隐私政策弹窗


SpannableString能设置不一样的文字样式

通过setSpan的方法进行设置
在这里插入图片描述
从源码可以看到可以填写四个参数,第一个参数what可以设置多种效果:
ForegroundColorSpan :字体颜色
在这里插入图片描述
BackgroundColorSpan:背景颜色
在这里插入图片描述
AbsoluteSizeSpan:字体大小
在这里插入图片描述
StyleSpan:粗斜体
在这里插入图片描述
StrikethroughSpan:删除线
在这里插入图片描述
UnderlineSpan:下划线
在这里插入图片描述
ImageSpan:图片
在这里插入图片描述
start - end 参数是设置显示的位置
可以用字体,也可以用下标
在这里插入图片描述
flags
在操作TextView的时候是没什么作用,但是在EditText这种可以输入的文本的时候,flags就起作用了。
你已经将某段字符做出改变,而你在所改变内容前后输入新的内容时,就会根据flags有所变化。
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 前后都不包含
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 不包含前面 包含后面
Spanned.SPAN_INCLUSIVE_EXCLUSIVE 包含前面,不包含后面
Spanned.SPAN_INCLUSIVE_INCLUSIVE 前后都包含
下面就通过SpannableString来实现隐私政策的弹窗跳转
在这里插入图片描述
代码

fun onClick(view: View) {
	
	// 弹窗
    val dialog = AlertDialog.Builder(this)
    
    dialog.setTitle("隐私政策")
    //组装弹窗信息
    dialog.setMessage(spannableString())
    
    dialog.setPositiveButton("同意"){ dialog, which ->

    }
    dialog.setNegativeButton("不同意"){ dialog, which ->

    }
    dialog.show()
}
//设置信息显示格式
private fun spannableString () : SpannableString {
    val contentStr = "请你务必审慎阅读、充分理解“用户协议”和“隐私政策”各条款,包括但不限于:为了向你提供即时评论、内容分享等服务,我们需要收集你的设备信息、操作日志等个人信息。你可阅读《用户协议》和《隐私政策》了解详细信息。如你同意,请点击”同意”开始接受我们的服务。"
    val userStr = "《用户协议》"
    val privacyStr = "《隐私政策》"
	//字符串拼接
    val userStrStartIndex = contentStr.indexOf(userStr,0)
    val privacyStrStartIndex = contentStr.indexOf(privacyStr,0)
    val userStrEndIndex = userStrStartIndex + userStr.length
    val privacyStrEndIndex = privacyStrStartIndex + privacyStr.length
	
    var spannableString = SpannableString(contentStr)
    var color = ContextCompat.getColor(this, R.color.blue)
	//设置样式
    spannableString.setSpan(ForegroundColorSpan(color), userStrStartIndex, userStrEndIndex, Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
    spannableString.setSpan(ForegroundColorSpan(color), privacyStrStartIndex, privacyStrEndIndex, Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
    spannableString.setSpan(
        UserClickableSpan(), userStrStartIndex, userStrEndIndex,
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

    spannableString.setSpan(
        PrivacyClickableSpan(), privacyStrStartIndex, privacyStrEndIndex,
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

    return spannableString
}

/**
 * 用户协议
 * 点击事件
 */
private inner class UserClickableSpan() : ClickableSpan(), View.OnClickListener {

    override fun updateDrawState(ds: TextPaint) {
        ds.isUnderlineText = false //去除超链接的下划线
        ds.clearShadowLayer()
    }
    override fun onClick(v: View) {
        val intent = Intent()
        intent.action = "android.intent.action.VIEW";
        intent.data = Uri.parse("https://www.baidu.com/");
        startActivity(intent);
    }
}

/**
 * 隐私政策
 *  点击事件
 */
private inner class PrivacyClickableSpan() : ClickableSpan(), View.OnClickListener {

    override fun updateDrawState(ds: TextPaint) {
        ds.isUnderlineText = false //去除超链接的下划线
        ds.clearShadowLayer()
    }

    override fun onClick(v: View) {
        val intent = Intent()
        intent.action = "android.intent.action.VIEW";
        intent.data = Uri.parse("https://www.baidu.com/");
        startActivity(intent);
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio ,可以使用 SpannableString 类来实现文本的样式设置和图文混排。下面是一个简单的示例代码: ```java TextView textView = findViewById(R.id.textView); // 创建一个 SpannableString SpannableString spannableString = new SpannableString("这是一段带图片的文字"); // 加载图片资源 Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher_background); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); // 创建一个 ImageSpan ImageSpan imageSpan = new ImageSpan(drawable); // 设置图片的位置和大小 spannableString.setSpan(imageSpan, 5, 6, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); // 设置文字的颜色和大小 ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED); RelativeSizeSpan sizeSpan = new RelativeSizeSpan(1.5f); spannableString.setSpan(colorSpan, 0, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(sizeSpan, 0, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); // 将 SpannableString 设置到 TextView textView.setText(spannableString); ``` 上述代码,我们首先创建了一个 `SpannableString` 对象,然后通过 `getResources().getDrawable()` 方法加载一张图片,创建一个 `ImageSpan` 对象,并将其设置到 `SpannableString` 。接着,我们通过 `ForegroundColorSpan` 和 `RelativeSizeSpan` 类来设置文字的颜色和大小,并将它们设置到 `SpannableString` 。最后,我们将 `SpannableString` 设置到 `TextView` 显示出来。 需要注意的是,`setSpan()` 方法的第二个参数和第三个参数分别表示样式的起始位置和结束位置,它们的单位是字符的索引值。在上述示例,我们将图片设置到了第 6 个字符的位置,因此第二个参数为 5,第三个参数为 6。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值