美文网首页
使用 Jetpack compose 撸一个<<用户协议>>与<

使用 Jetpack compose 撸一个<<用户协议>>与<

作者: 水中沚_b078 | 来源:发表于2021-03-16 11:05 被阅读0次

    废话不多说直接上代码

    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 撸一个<<用户协议>>与<

          本文链接:https://www.haomeiwen.com/subject/thnrcltx.html