当前位置: 首页 > news >正文

Android 实现阅读用户协议的文字控件效果

开发中,经常要用到一些阅读隐私协议的场景,原生的textview控件很难做到在一个控件里有两个点击事件,那现在就来安利一个强大的组件——SpannableStringBuilder。

先看看效果:

 直接上代码,布局文件:

    <LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingLeft="40dp"android:paddingRight="40dp"android:gravity="center_vertical"android:orientation="horizontal"><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_vertical"android:text="我已阅读并同意" /><TextViewandroid:id="@+id/login_rule"android:layout_width="wrap_content"android:text="《用户协议》、"android:layout_height="wrap_content"/></LinearLayout>

布局文件很容易理解,一个checkbox实现选中效果,旁边加一个textview。

在activity中;

private TextView mLoginRule;

通过findviewbyid获取控件id后

    private void setRule() {SpannableStringBuilder span = new SpannableStringBuilder();span.append("隐私协议").append("、").append("用户协议");ClickableSpan clickableSpan = new ClickableSpan() {@Overridepublic void onClick(@NonNull View view) {ToastUtils.show("隐私政策");}};ClickableSpan clickableSpan2 = new ClickableSpan() {@Overridepublic void onClick(@NonNull View view) {ToastUtils.show("用户协议");}};span.setSpan(clickableSpan,0,4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);span.setSpan(clickableSpan2,5,9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);mLoginRule.setText(span);mLoginRule.setMovementMethod(LinkMovementMethod.getInstance());}

代码很容易理解,重点讲讲setSpan,这里第一个参数定义了响应点击事件的方法,第二个就是文字的开头角标,第三个是文字结尾角标,第四个表示不包含start和end所在的端点  (star,end)

setSpan(clickableSpan,0,4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

注意

 mLoginRule.setMovementMethod(LinkMovementMethod.getInstance());

很关键,否则无法响应点击事件

http://www.lryc.cn/news/97100.html

相关文章:

  • 19.主题时钟
  • ChatGPT在智能电子设备中的应用如何?
  • MGRE之OSPF实验
  • 【Selenium+Pytest+allure报告生成自动化测试框架】附带项目源码和项目部署文档
  • 如何负载均衡中的日志统一管理
  • Java_26_Stream流
  • 周四见 | 物流人的一周资讯
  • uniapp 即时通讯开发流程详解
  • 【Terraform学习】Terraform-docker部署快速入门(快速入门)
  • C# 全局响应Ctrl+Alt+鼠标右键
  • 【Leetcode】54.螺旋矩阵
  • 怎样计算一个算法的复杂度?
  • 【问题记录】Ubuntu 22.04 环境下,打开 VS Code 老是访问密钥环该怎么解决?
  • format格式化输出语法详解
  • RocketMQ教程-(5)-功能特性-事务消息
  • HANA学习笔记
  • VMware虚拟机无法上网的解决办法
  • PLC-Recorder的高速采集有多快?0.5ms算快吗?看控制器能力了!
  • KMP算法总结
  • 消息中间件ActiveMQ介绍
  • 【100天精通python】Day9:数据结构_字典、集合
  • 上海VR全景展示,快速了解VR全景拍摄
  • VScode远程不用再输入密码操作
  • MyBatis基本用法-@TableId
  • React AntDesign写一个导出数据的提示语 上面有跳转的路径,或者点击知道了,关闭该弹层
  • 小红书课程发光社群知识库,点亮哥专为超级个体设计解决方案
  • 基于SpringBoot+Vue的摄影跟拍预定管理系统设计与实现(源码+lw+部署文档等)
  • HCIA 第二课总结
  • linux-------联网下载文件和配置
  • 字典树Trie