Android 实现一个隐私弹窗

效果图如下:

1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数

2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来

res/layout/dialog_privacy_policy.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/dialogRoot"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bg_dialog_rounded"android:orientation="vertical"android:padding="24dp"><TextViewandroid:id="@+id/tvTitle"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="用户协议和隐私政策"android:textColor="#222222"android:textSize="18sp"android:textStyle="bold"android:gravity="center"android:layout_marginBottom="16dp"/><TextViewandroid:id="@+id/tvContent"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="#444444"android:textSize="15sp"android:lineSpacingExtra="4dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_marginTop="24dp"android:gravity="center"><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btnExit"android:layout_width="0dp"android:layout_height="48dp"android:layout_weight="1"android:text="退出应用"android:textColor="#5E5C3F"android:background="@drawable/bg_button_outline"android:textSize="16sp" /><Viewandroid:layout_width="16dp"android:layout_height="0dp" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btnAgree"android:layout_width="0dp"android:layout_height="48dp"android:layout_weight="1.5"android:text="已阅读并同意"android:textColor="#FFFFFF"android:background="@drawable/bg_button_primary"android:textSize="16sp" /></LinearLayout>
</LinearLayout>

res/drawable/bg_dialog_rounded.xml 文件

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="#FFFFFF"/><corners android:radius="14dp"/>
</shape>

res/drawable/bg_button_outline.xml文件

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="#FFFFFF" /><stroke android:width="0.5dp" android:color="#5E5C3F" /><corners android:radius="8dp" />
</shape>

res/drawable/bg_button_primary.xml文件

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="#5E5C3F" /><corners android:radius="8dp" />
</shape>

PrivacyPolicyDialog.kt 文件
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.text.SpannableString
import android.text.Spanned
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.view.LayoutInflater
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AlertDialogclass PrivacyPolicyDialog(private val context: Context,private val onAgree: () -> Unit,private val onExit: () -> Unit,private val onClickUserAgreement: () -> Unit,private val onClickPrivacyPolicy: () -> Unit
) {fun show() {val view = LayoutInflater.from(context).inflate(R.layout.dialog_privacy_policy, null)val tvContent = view.findViewById<TextView>(R.id.tvContent)val tvTitle = view.findViewById<TextView>(R.id.tvTitle)val btnAgree = view.findViewById<Button>(R.id.btnAgree)val btnExit = view.findViewById<Button>(R.id.btnExit)val content = "在您使用本应用之前,请您务必审慎阅读、充分理解“用户协议”和“隐私政策”各条款内容。详细资料请阅读:《用户协议》和《隐私政策》。"val spannable = SpannableString(content)val userStart = content.indexOf("《用户协议》")val userEnd = userStart + "《用户协议》".lengthval privacyStart = content.indexOf("《隐私政策》")val privacyEnd = privacyStart + "《隐私政策》".lengthspannable.setSpan(object : ClickableSpan() {override fun onClick(widget: View) {onClickUserAgreement()}}, userStart, userEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)spannable.setSpan(object : ClickableSpan() {override fun onClick(widget: View) {onClickPrivacyPolicy()}}, privacyStart, privacyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)tvContent.text = spannabletvContent.movementMethod = LinkMovementMethod.getInstance()tvContent.highlightColor = Color.TRANSPARENTval dialog = AlertDialog.Builder(context).setView(view).setCancelable(false).create()dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))btnAgree.setOnClickListener {onAgree()dialog.dismiss()}btnExit.setOnClickListener {onExit()dialog.dismiss()}dialog.show()}
}

MainActivity.kt
 

package com.example.poemappimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.ViewGroup
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AlertDialogclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)PrivacyPolicyDialog(context = this,onAgree = {Toast.makeText(this, "用户已同意", Toast.LENGTH_SHORT).show()// TODO: 记录已同意状态},onExit = {finish()},onClickUserAgreement = {// TODO: 跳转用户协议页面},onClickPrivacyPolicy = {// TODO: 跳转隐私政策页面}).show()}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP概念+模拟tcp服务器及客户端

目录 一、TCP基本概念 二、ser服务器代码 三、cil客户端代码 四、面试常问问题 4.1 TCP的可靠性怎么保证或怎么实现? 4.2 具体说一下滑动窗口 一、TCP基本概念 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可…

Cocos Creator 自动图集资源 (Auto Atlas)使用注意事项

1、游戏打包时&#xff0c;自动图集设置选项中&#xff0c;默认会删除无关联的图片 2、自动图集设置中&#xff0c;就算勾除(Remove unused ImageAsset from the Bundle)的功能&#xff0c;无关联的图片也不会打包进入图集之中&#xff0c;会独立存在打包的游戏中。 3、使用自动…

PyTorch 2.0编译器技术深度解析:如何自动生成高性能CUDA代码

引言&#xff1a;编译革命的范式转移 PyTorch 2.0的torch.compile不仅是简单的即时编译器&#xff08;JIT&#xff09;&#xff0c;更标志着深度学习框架从‌解释执行‌到‌编译优化‌的范式跃迁。本文通过逆向工程编译过程&#xff0c;揭示PyTorch如何将动态图转换为高性能CU…

【AI面试准备】从0-1搭建人工智能模型自动化评估理论与测试,掌握测试数据集建立与优化,熟练数据处理和模型评测工作

面试要求&#xff1a;从0-1搭建人工智能模型自动化评估理论与测试&#xff0c;掌握测试数据集建立与优化&#xff0c;熟练数据处理和模型评测工作。 以下是针对从0-1搭建AI模型自动化评估体系的系统化知识总结&#xff0c;涵盖核心方法论、技术栈、高频考点及面试回答模板&…

【Linux应用】在PC的Linux环境下通过chroot运行ARM虚拟机镜像img文件(需要依赖qemu-aarch64、不需要重新安装iso)

【Linux应用】在PC的Linux环境下通过chroot运行ARM虚拟机镜像img文件&#xff08;需要依赖qemu-aarch64、不需要重新安装iso&#xff09; qemu提供了运行ARM虚拟机的方法 具体的操作方式就是建立一个硬盘img 然后通过iso安装到img 最后再运行img即可 这种方式教程很多 很简单 …

OpenCv实战笔记(1)在win11搭建opencv4.11.1 + qt5.15.2 + vs2019_x64开发环境

一. 准备工作 Visual Studio 2019&#xff08;安装时勾选 C 桌面开发 和 Windows 10 SDK&#xff09; CMake 3.20&#xff08;官网下载&#xff09; Qt 5.15.2&#xff08;下载 Qt Online Installer&#xff09;安装时勾选 MSVC 2019 64-bit 组件。 opencv 4.11.1 源码下载 git…

springboot+mysql+element-plus+vue完整实现汽车租赁系统

目录 一、项目介绍 二、项目截图 1.项目结构图 三、系统详细介绍 管理后台 1.登陆页 2.管理后台主页 3.汽车地点管理 4.汽车类别 5.汽车品牌 6.汽车信息 7.用户管理 8.举报管理 9.订单管理 10.轮播图管理 11.交互界面 12.图表管理 汽车租赁商城 1.首页 2.汽…

【算法笔记】动态规划基础(二):背包dp

目录 01背包例题状态表示状态计算初始化AC代码 完全背包例题状态表示状态计算初始化TLE代码 多重背包例题状态表示状态计算初始化AC代码 分组背包例题状态表示状态计算初始化AC代码 二维费用背包例题状态表示状态计算初始化AC代码 混合背包问题例题状态表示状态计算初始化TLE代…

Qt Quick Design 下载社区版

官方地址&#xff1a;Qt Design Studio - UI Development Tool for Applications & Devices 社区版只能用于开源软件的开发 按图所示下载或直接跳转到下载页面&#xff1a;Download Qt OSS: Get Qt Online Installerhttps://www.qt.io/download-qt-installer-oss 选Try …

深入理解CSS盒子模型

一、盒子模型的核心概念 CSS盒子模型&#xff08;Box Model&#xff09;是网页布局的基石&#xff0c;每个HTML元素都可以看作一个矩形盒子&#xff0c;由四个同心区域构成&#xff1a; 内容区&#xff08;Content&#xff09; 内边距&#xff08;Padding&#xff09; 边框&a…

Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)

1.智能路径处理&#xff1a;自动识别并修正文件扩展名&#xff0c;根据转换类型自动建议目标路径&#xff0c;实时路径格式验证&#xff0c;自动补全缺失的文件扩展名。 2.增强型预览功能&#xff1a;使用pandastable库实现表格预览&#xff0c;第三方模块自己安装一下&#x…

数据库MySQL学习——day9(聚合函数与分组数据)

文章目录 1. 聚合函数1.1 COUNT() 函数1.2 SUM() 函数1.3 AVG() 函数1.4 MIN() 函数1.5 MAX() 函数 2. GROUP BY 子句2.1 使用 GROUP BY 进行数据分组2.2 结合聚合函数 3. HAVING 子句3.1 使用 HAVING 过滤分组数据3.2 HAVING 和 WHERE 的区别 4. 实践任务4.1 创建一个销售表4.…

数据管理能力成熟度评估模型(DCMM)全面解析:标准深度剖析与实践创新

文章目录 一、DCMM模型的战略价值与理论基础1.1 DCMM的本质与战略定位1.2 DCMM的理论基础与创新点 二、DCMM模型的系统解构与逻辑分析2.1 八大能力域的有机关联与系统架构2.2 五级成熟度模型的内在逻辑与演进规律 三、DCMM八大能力域的深度解析与实践创新3.1 数据战略&#xff…

Docker搜索镜像报错

科学上网最方便。。。。 主要是镜像的问题 尝试一&#xff1a; 报错处理 Error response from daemon: Get https://index.docker.io/v1/search?qmysql&n25: dial tcp 31.13.84.2:443: i/o timeout Error response from daemon: Get https://index.docker.io/v1/se…

ERP系统源码,java版ERP管理系统源码,云端ERP

一套开箱即用的云端ERP系统源代码&#xff0c;小型工厂ERP系统源码 SaaS ERP是一套开箱即用的云端ERP系统&#xff0c;有演示&#xff0c;开发文档&#xff0c;数据库文档齐全&#xff0c;自主版权落地实例&#xff0c;适合项目二开。 SaaS ERP具有高度的灵活性和可扩展性&am…

Sliding Window Attention(Longformer)

最简单的自注意力大家肯定都会啦。 但这种全连接的自注意力&#xff08;即每个 token 需要 attend 到输入序列中的所有其他 token&#xff09;计算与内存开销是 O ( n 2 ) O(n^2) O(n2) 。为了缓解这个问题&#xff0c;研究者们提出了 Sliding Window Attention。 Sliding W…

在Window10 和 Ubuntu 24.04LTS 上 Ollama 在线或离线安装部署

Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;服务框架&#xff0c;旨在通过轻量化、跨平台的设计&#xff0c;简化大模型在本地环境中的部署与应用。其基于 Go 语言开发&#xff0c;通过 Docker 容器化技术封装模型运行环境&#xff0c;提供类似命令行工具的交…

在Ubuntu系统中安装桌面环境

在 Ubuntu 系统中安装桌面环境可以通过包管理器 apt 或工具 tasksel 实现。以下是详细的安装方法和常见桌面环境的选择&#xff1a; --- ### **1. 准备系统更新** 在安装前&#xff0c;建议更新软件源和系统包&#xff1a; bash sudo apt update && sudo apt upgrade…

【云备份】服务端业务处理模块设计与实现

目录 一. 业务处理模块的任务 二. 网络通信接口设计 2.1.文件上传 2.2.展示页面获取 2.3.文件下载 三.业务处理类设计 3.1.业务处理类的代码框架编写 3.2.文件上传代码编写 3.3.展示页面的获取代码编写 3.4.文件下载代码编写——下载篇 3.4.文件下载代码编写——断…

基于SpringBoot的漫画网站设计与实现

1.1项目研究的背景 困扰管理层的许多问题当中,漫画信息管理一定是不敢忽视的一块。但是管理好漫画网站又面临很多麻烦需要解决,如何在工作琐碎,记录繁多的情况下将漫画网站的当前情况反应给相关部门决策等等。在此情况下开发一款漫画网站&#xff0c;于是乎变得非常合乎时宜。…