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.pswp.cn/web/78622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78622.shtml
英文地址,請注明出處:http://en.pswp.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;于是乎變得非常合乎時宜。…