使用 Jetpack compose 擼一個<<用戶協(xié)議>>與<<隱私協(xié)議>>對話框

廢話不多說直接上代碼

class WelcomeActivity : RxAppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)

                setContent {
                    MaterialTheme {
                        Scaffold {
                            Column {
                                Box(modifier = Modifier.weight(1f)) {
                                WelcomeImage()
                                WelcomeHeader()
                                }
                                WelcomeAppInfo()
                                // 這里就是你們要的對話框調(diào)用
                                ProtocolDialog()
                            }
                        }
                    }
                }
            }

        /**
     * 用戶協(xié)議對話框
     */
    @Composable
    fun ProtocolDialog() {
        // 這里需要根據(jù)實(shí)際情況獲取保存在sharedPreference里面的值來決定是否展示對話框
        val openDialog = remember { mutableStateOf(true) }
        if (!openDialog.value) { // 如果已經(jīng)展示過了那么跳過
            return
        }
        // 定義一個map 用來和 appendInlineContent 設(shè)置的內(nèi)容進(jìn)行替換, 這里替換了 "《用戶協(xié)議》" 和 "《隱私政策》" 為可點(diǎn)擊的內(nèi)容
        val inlineContent = mapOf(Pair("protocol",
                                       InlineTextContent(Placeholder(width = 6.em,
                                                                     height = 1.5.em,
                                                                     placeholderVerticalAlign = PlaceholderVerticalAlign.Center)) {
                                           Box(modifier = Modifier
                                               .fillMaxSize()
                                               .clickable {
                                                   // 這里跳轉(zhuǎn)到用戶協(xié)議頁面
                                               },
                                               contentAlignment = Alignment.Center) {
                                               Text(text = "《用戶協(xié)議》", style = TextStyle(color = Color.Red))
                                           }
                                       }),
                                  Pair("policy",
                                       InlineTextContent(Placeholder(width = 6.em,
                                                                     height = 1.5.em,
                                                                     placeholderVerticalAlign = PlaceholderVerticalAlign.Center)) {
                                           Box(modifier = Modifier
                                               .fillMaxSize()
                                               .clickable {
                                                   // 這里跳轉(zhuǎn)到隱私政策頁面
                                               },
                                               contentAlignment = Alignment.Center) {
                                               Text(text = "《隱私政策》", style = TextStyle(color = Color.Red))
                                           }
                                       }))

        val annotatedString = buildAnnotatedString {
            append("用戶協(xié)議和隱私政策請你務(wù)必審慎閱讀、充分理解\"用戶協(xié)議”和\"隱私政策”各條款,\n包括但不限于:為了向你提供即時通訊、內(nèi)容分享等服務(wù),我們需要收集你的設(shè)備信息、操作日志等個人信息。你可以在“設(shè)置\"中查看、變更、刪除個人信息并管理你的授權(quán)。\n你可閱讀")

            // 這里的內(nèi)容("《用戶協(xié)議》"字符串--這個字符串隨便定義即可)將被 inlineContent 里 key 為 protocol 的 內(nèi)容替換, 以實(shí)現(xiàn)點(diǎn)擊功能
            appendInlineContent("protocol", "《用戶協(xié)議》")

            pushStyle(SpanStyle(color = Color.Red, fontSize = 14.sp, fontStyle = FontStyle.Italic))
            append("和")
            pop()

             // 這里的內(nèi)容("《隱私政策》"字符串--這個字符串隨便定義即可)將被 inlineContent 里 key 為 policy 的 內(nèi)容替換, 以實(shí)現(xiàn)點(diǎn)擊功能
            appendInlineContent("policy", "《隱私政策》")

            append("了解詳細(xì)信息。如你同意,請點(diǎn)擊“同意”開始接受我們的服務(wù)。")
        }

        AlertDialog(
            onDismissRequest = {},
            title = { Text(text = "溫馨提示") },
            text = { Text(annotatedString, inlineContent = inlineContent) },
            confirmButton = {
                TextButton(onClick = {
                    openDialog.value = false
                    // 保存一個狀態(tài) 下次不加載對話框, 這個狀態(tài)在這個方法第一行代碼中用到 (        val openDialog = remember { mutableStateOf(保存的狀態(tài)) })
                    // 跳轉(zhuǎn)到應(yīng)用內(nèi)頁面
                }) { Text("同意") }
            },
            dismissButton = {
                TextButton(onClick = {
                    openDialog.value = false
                   // 退出應(yīng)用
                }) { Text("暫不使用") }
            })
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容