已解决
Android 快速实现隐私协议跳转链接
来自网友在路上 162862提问 提问时间:2023-10-31 08:15:07阅读次数: 62
最佳答案 问答题库628位专家为你答疑解惑
首先在string.xml创建对应字串
<string name="link">我已仔细阅读并同意<annotation value="privacy_policy">《隐私政策》</annotation>和<annotation value="service_agreement">《服务协议》</annotation></string>
然后在java代码中初始化Checkbox
private void initCheckBox() {CheckBox checkBox = findViewById(R.id.cb);//1、创建 SpannableStringBuilderSpannableStringBuilder sb = new SpannableStringBuilder(getText(R.string.link));//2、获取Annotation数组Annotation[] annotations = sb.getSpans(0, sb.length(), Annotation.class);//3、遍历 Annotation 数组for (Annotation annotation : annotations) {String annotationValue = annotation.getValue();//注意:这里的value就是xml中 <annotation value="xxx"> 做到一一对应即可if (annotationValue.equals(USER_AGREEMENT) || annotationValue.equals(PRIVACY_AGREEMENT)) {int start = sb.getSpanStart(annotation);int end = sb.getSpanEnd(annotation);//4、构建ClickableSpanClickableSpan clickableSpan = new ClickableSpan() {@Overridepublic void onClick(View widget) {String url = "https:www.baidu.com";switch (annotationValue) {case USER_AGREEMENT:url = "https:www.baidu.com";break;googlecase PRIVACY_AGREEMENT:url = "https:www.google.com";break;}//5、根据annotationValue跳转对应urlIntent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setDataAndType(Uri.parse(url), "*/*");startActivity(intent);}@Overridepublic void updateDrawState(TextPaint ds) {ds.setColor(Color.BLUE);//显示链接下划线ds.setUnderlineText(true);}};sb.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}}checkBox.setText(sb);//关键一步,决定链接是否可以点击checkBox.setMovementMethod(LinkMovementMethod.getInstance());}
拓展—从聊天信息中解析链接
private void initLinkText() {TextView tvLink = findViewById(R.id.tv_link);String linkStr = "跳转百度https://www.baidu.com或者跳转google https://www.google.com";SpannableStringBuilder urlSpannableStringBuilder = createdUrlSpannableStringBuilder(linkStr);tvLink.setText(urlSpannableStringBuilder);//设置链接颜色tvLink.setLinkTextColor(Color.BLUE);//关键一步,决定链接是否可以点击tvLink.setMovementMethod(LinkMovementMethod.getInstance());}public SpannableStringBuilder createdUrlSpannableStringBuilder(String linkStr){Matcher m = Pattern.compile("(((https|http)?://)?([a-z0-9]+[.])|(www.))"+ "\\w+[.|\\/]([a-z0-9]{0,})?[[.]([a-z0-9]{0,})]+((/[\\S&&[^,;\u4E00-\u9FA5]]+)+)?([.][a-z0-9]{0,}+|/?)").matcher(linkStr);SpannableStringBuilder sb = new SpannableStringBuilder(linkStr);//1、用正则找出链接while(m.find()){String url = m.group();//2、构造URLSpanURLSpan urlSpan = new URLSpan(url);sb.setSpan(urlSpan,m.start(),m.end(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}return sb;}
查看全文
99%的人还看了
相似问题
- 使用WalletConnect Web3Modal v3 链接钱包基础教程
- MongoDB——golang操作(链接,CURD,聚合)
- HTML 超链接 a 标签
- WSL2安装ubuntu及修改安装位置,设置Ubuntu开机启动链接ssh服务
- Zotero在word中插入带超链接的参考文献/交叉引用/跳转参考文献
- 【Mysql】复合查询详解+实战操作(多表查询、自链接、子查询等)
- 如何将vscode和Linux远程链接:
- 轻松搭建短域名短链接服务系统,可选权限认证,并自动生成证书认证把nginx的http访问转换为https加密访问,完整步骤和代码
- 批量替换WordPress文章内图片链接
- 什么是BT种子!磁力链接又是如何工作的?
猜你感兴趣
版权申明
本文"Android 快速实现隐私协议跳转链接":http://eshow365.cn/6-28458-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 微信一次性群发1000条消息:高效沟通的秘诀
- 下一篇: 目标检测及锚框、IoU