使用 Jetpack compose 撸一个<<用户协议>>与<<隐私协议>>对话框

废话不多说直接上代码

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

                setContent {
                    MaterialTheme {
                        Scaffold {
                            Column {
                                Box(modifier = Modifier.weight(1f)) {
                                WelcomeImage()
                                WelcomeHeader()
                                }
                                WelcomeAppInfo()
                                // 这里就是你们要的对话框调用
                                ProtocolDialog()
                            }
                        }
                    }
                }
            }

        /**
     * 用户协议对话框
     */
    @Composable
    fun ProtocolDialog() {
        // 这里需要根据实际情况获取保存在sharedPreference里面的值来决定是否展示对话框
        val openDialog = remember { mutableStateOf(true) }
        if (!openDialog.value) { // 如果已经展示过了那么跳过
            return
        }
        // 定义一个map 用来和 appendInlineContent 设置的内容进行替换, 这里替换了 "《用户协议》" 和 "《隐私政策》" 为可点击的内容
        val inlineContent = mapOf(Pair("protocol",
                                       InlineTextContent(Placeholder(width = 6.em,
                                                                     height = 1.5.em,
                                                                     placeholderVerticalAlign = PlaceholderVerticalAlign.Center)) {
                                           Box(modifier = Modifier
                                               .fillMaxSize()
                                               .clickable {
                                                   // 这里跳转到用户协议页面
                                               },
                                               contentAlignment = Alignment.Center) {
                                               Text(text = "《用户协议》", style = TextStyle(color = Color.Red))
                                           }
                                       }),
                                  Pair("policy",
                                       InlineTextContent(Placeholder(width = 6.em,
                                                                     height = 1.5.em,
                                                                     placeholderVerticalAlign = PlaceholderVerticalAlign.Center)) {
                                           Box(modifier = Modifier
                                               .fillMaxSize()
                                               .clickable {
                                                   // 这里跳转到隐私政策页面
                                               },
                                               contentAlignment = Alignment.Center) {
                                               Text(text = "《隐私政策》", style = TextStyle(color = Color.Red))
                                           }
                                       }))

        val annotatedString = buildAnnotatedString {
            append("用户协议和隐私政策请你务必审慎阅读、充分理解\"用户协议”和\"隐私政策”各条款,\n包括但不限于:为了向你提供即时通讯、内容分享等服务,我们需要收集你的设备信息、操作日志等个人信息。你可以在“设置\"中查看、变更、删除个人信息并管理你的授权。\n你可阅读")

            // 这里的内容("《用户协议》"字符串--这个字符串随便定义即可)将被 inlineContent 里 key 为 protocol 的 内容替换, 以实现点击功能
            appendInlineContent("protocol", "《用户协议》")

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

             // 这里的内容("《隐私政策》"字符串--这个字符串随便定义即可)将被 inlineContent 里 key 为 policy 的 内容替换, 以实现点击功能
            appendInlineContent("policy", "《隐私政策》")

            append("了解详细信息。如你同意,请点击“同意”开始接受我们的服务。")
        }

        AlertDialog(
            onDismissRequest = {},
            title = { Text(text = "温馨提示") },
            text = { Text(annotatedString, inlineContent = inlineContent) },
            confirmButton = {
                TextButton(onClick = {
                    openDialog.value = false
                    // 保存一个状态 下次不加载对话框, 这个状态在这个方法第一行代码中用到 (        val openDialog = remember { mutableStateOf(保存的状态) })
                    // 跳转到应用内页面
                }) { Text("同意") }
            },
            dismissButton = {
                TextButton(onClick = {
                    openDialog.value = false
                   // 退出应用
                }) { Text("暂不使用") }
            })
    }

}

你可能感兴趣的:(使用 Jetpack compose 撸一个<<用户协议>>与<<隐私协议>>对话框)