今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~
今天目标:了解 Compose UI 上 Dialog 怎麽使用。
Dialog 是 App 使用互动上常常遇到的功能,
今天就来研究一下怎麽呼叫出 Dialog 功能以及一些
原本Android熟悉的 Dialog使用方法怎麽在 Compose 上实现。
查了一下 Dialog 的使用(如参考),非常直接跟简单,
程序码如下:
@Composable
fun AlertDialogSample() {
MaterialTheme {
Column(Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally) {
val openDialog = remember { mutableStateOf(false) }
Button(onClick = {
openDialog.value = true
}) {
Text("Click me")
}
if (openDialog.value) {
AlertDialog(
onDismissRequest = {
// Dismiss the dialog when the user clicks outside the dialog or on the back
// button. If you want to disable that functionality, simply use an empty
// onCloseRequest.
openDialog.value = false
},
title = { Text(text = "Dialog Title") },
text = { Text("Here is a text ") },
confirmButton = {
Button( onClick = {
openDialog.value = false
}) {
Text("This is the Confirm Button")
}
},
dismissButton = {
Button(
onClick = {
openDialog.value = false
}) {
Text("This is the dismiss Button")
}
}
)
}
}
}
}
显示 Click me Button
按下Button後显示的Dialog
如上二图,看了一下也超级简单!
今天就这样结束吧!
等等,有几行程序码是以前没看过的,这些不用了解一下吗?HAHA!
当然要,什麽是 remember?
查了一下相关资料,原来因为 Compose UI 是宣告式语言,
如果今天你没有定义他的显示状态,
那他就会没有任何显示上的改变(因为没有定义要改变成什麽状态)。
所以Compose UI就提供了开发者用於记录状态的 remember 函式,
你可以在这个函式里面去宣告你要定义的变数,
且使用者在使用的时候可以去变更这个状态,
然後你只需要定义清楚每个状态下UI应该如何显示即可。
@Composable
fun textFieldStateHasTextShow() {
var value by remember {
mutableStateOf("") }
Box(modifier = Modifier.fillMaxSize(1f), contentAlignment = Alignment.Center) {
OutlinedTextField(
value = value,
onValueChange = {
value = it
},
label = { Text("Name") }
)
}
Box(modifier = Modifier.fillMaxSize().padding(4.dp),contentAlignment = Alignment.TopCenter,){
Text(value)
}
}
宣告了一个字串,让Text 可以读取这个字串去显示,
而 OutlinedTextField 的部分则是拿来输入使用者想要显示在 Text 上的元件。
了解了 remember 跟 dialog 後,
就可以开始实作一些想与使用者互动且产生画面变化的行为了。
如果没问题的话,明天见罗:)
参考资料:https://foso.github.io/Jetpack-Compose-Playground/material/alertdialog/
参考资料:https://juejin.cn/post/7000137483220418590
本文同步发表在 Medium 上 文章连结
<<: Vue.js 从零开始:SSR、MPA、SPA的概念
昨天写完查询物品拍卖价格网址後发现...既然都有各国物品名称了 乾脆多做一个查询各国物品名称并附上W...
一次性密码(one-time pad)和一次性密码(one-time passoword )的首字母...
前言 为了能够更全面的去理解k8s的原理 今天主要从k8s 几个基础的元件开始介绍 Node &am...
JavaScript 是动态型别的程序语言,指的是变数的型别是可以更换的, 而 JavaScript...
今天介绍的这篇,是很明显的天气IoT实例应用,作者将天气Sensor收集来要资料,用Logstash...