Android 阅读并同意“服务协议”与“隐私政策”

一、介绍

 

        在首次进入app 或者需要登录时,往往需要提示用户同意协议服务协议与隐私协议

        两个都可以点击进入条款页面

        一般做法为三个TextView进行拼接,但是遇到这样的需求时

        只能用一个TextView来实现了。。那么。。。

 

二、实现方式

 

       设置 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)

 

结束结束。。xml就是普通的TextView

 

 

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是 Android API 29 勾选手机状态权限的动态申请代码示例: ```java // 检查是否已经获取了权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { // 如果没有权限,则申请权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1); } else { // 如果已经获取了权限,则执行相关操作 // TODO: 执行相关操作 } // 处理权限申请的结果 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户同意授权,执行相关操作 // TODO: 执行相关操作 } else { // 用户拒绝授权,给出提示 Toast.makeText(this, "您拒绝了该权限,可能无法正常使用该功能", Toast.LENGTH_SHORT).show(); } } } ``` 以上代码中,首先通过 `ContextCompat.checkSelfPermission()` 方法检查是否已经获取了所需的权限,如果没有权限,则调用 `ActivityCompat.requestPermissions()` 方法申请权限;如果已经获取了权限,则执行相关操作。 当用户给出权限申请结果后,系统会调用 `onRequestPermissionsResult()` 方法,我们可以在该方法中处理用户的授权结果,根据结果执行相应的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值