Day 12 Compose UI Dialog

今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~

今天目标:了解 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
显示 Click me Button
按下Button後显示的Dialog
按下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的概念

>>:  资料不够,API来凑 Day13

[DAY 07]查询各国物品名称

昨天写完查询物品拍卖价格网址後发现...既然都有各国物品名称了 乾脆多做一个查询各国物品名称并附上W...

一次性密码 (One-time pad:OTP)

一次性密码(one-time pad)和一次性密码(one-time passoword )的首字母...

IT 铁人赛 k8s 入门30天 -- day2 k8s 元件介绍

前言 为了能够更全面的去理解k8s的原理 今天主要从k8s 几个基础的元件开始介绍 Node &am...

【Day11】动态型别

JavaScript 是动态型别的程序语言,指的是变数的型别是可以更换的, 而 JavaScript...

Day 26:ELK stack for observation system

今天介绍的这篇,是很明显的天气IoT实例应用,作者将天气Sensor收集来要资料,用Logstash...