废话不多说直接上代码
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("暂不使用") }
})
}
}
网友评论