โ๐ป ๊ธฐ์กด์ ์๋๋ก์ด๋ ๋ ๊ฑฐ์ ๋ทฐ์ Jetpack Compose์์ Checkbox์ ๋ค๋ฅธ์
๊ธฐ์กด์ ์๋๋ก์ด๋ ๋ ๊ฑฐ์ ๋ทฐ์์๋ ์ฒดํฌ๋ฐ์ค์ ์ํ๋ฅผ ์ฌ์ฉ์๊ฐ ์ฒดํฌ๋ฐ์ค๋ฅผ ํญํ ๋๋ง๋ค ์ฒดํฌ ์ํ๊ฐ ํ ๊ธ ๋์๋ค.
Jetpack Compose์์๋ ์ด๋ฌํ ๋์์ ๋ช ์์ ์ผ๋ก ์ ์ํด์ผ ํ๋ฉฐ Checkbox์ ์ํ๋ checked ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ์ด๊ธฐ์ checked ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด Checkbox์ ์ํ๊ฐ ์ ๋ฐ์ดํธ ๋์ง ์๋๋ค.
๐ฅ Compose์์ Checkbox์ ๋์์ ์ ์ดํ๊ธฐ ์ํด์๋onCheckedChange
๋งค๊ฐ๋ณ์์ ์ํ ๋ณ๊ฒฝ์ ๋ํ ๋ก์ง์ ํฌํจํ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๊ณตํด์ผ ํ๋ฉฐ ์ด ์ฝ๋ฐฑ ํจ์์์ Checkbox์ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ณ ํ์ํ ์์ ์ ์ํํ ์ ์๋ค.
Checkbox(checked = false, onCheckedChange = {})
๐ก ์ฒดํฌ๋ฐ์ค๊ฐ Ex1์ ๋์ํ์ง ์๊ณ , Ex2๋ ์ ์์ ์ผ๋ก ๋์ํ๋ ์ด์
Ex1์์๋ checked ๋ณ์๋ฅผ ํ ๊ธํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์๋ค. ์ด๋ด ๊ฒฝ์ฐ Compose์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ Checkbox์ ์ํ๊ฐ ์ ๋ฐ์ดํธ๋์ง ์๊ณ UI๊ฐ ๊ฐฑ์ ๋์ง ์๋๋ค.
โ๐ป Compose์์๋ UI ์ํ๋ฅผ ์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ Compose์๊ฒ UI๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋๋ก ์์ฒญํด์ผ ํ๋ค.
โจ Compose์ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ ์ค ํ๋์ธmutableStateOf
๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ด๋ฅผ ํตํด Checkbox์ ์ํ๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค. ๊ทธ๋ฌ๋ฉด ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋์ผ๋ก UI๋ฅผ ์ ๋ฐ์ดํธํ ๊ฒ์ด๋ค.
// Ex1
@Composable
fun CheckBoxEx() {
var checked = false
Checkbox(checked = checked,
onCheckedChange = {
checked = !checked
})
}
// Ex2
@Composable
fun CheckBoxEx() {
var checked = remember {mutableStateOf(false)}
Checkbox(checked = checked.value,
onCheckedChange = {
checked.value = !checked.value
})
}
delegated properties๋ ํ๋กํผํฐ์ getter์ setter๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ํ ์ ์๋ค.
์๋์ ์ฝ๋๋checked
๋ณ์์ ๋ํ getter์ setter๋ฅผremember
ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ฒด์ ์์ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ,by
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ฐ์ฒด์checked
๋ณ์์ getter์ setter๋ฅผ ์์ํ๋ค.
@Composable
fun CheckBoxEx() {
var checked by remember { mutableStateOf(false) }
Checkbox(checked = checked,
onCheckedChange = {
checked = !checked
})
}
val (getter, setter)
๋ถ๋ถ์์ ๋ฐํ ๋ ๊ฐ์ฒด๋ฅผ ํด์ ํ์ฌ getter์ setter๋ผ๋ ๋ ๊ฐ์ ๋ณ์์ ํ ๋นํ๋ค.
@Composable
fun CheckBoxEx() {
val (getter, setter) = remember { mutableStateOf(false) }
Checkbox(
checked = getter,
onCheckedChange = setter
)
}
Jetpack Compose์์ TopAppBar๋ฅผ ์ ์ธ ์ ๋นจ๊ฐ์ค๊ณผ ํจ๊ป ๋ค์์ ๋ฉ์ธ์ง๊ฐ ๋ํ๋๊ณ ์๋ค.
์คํ์ฉ foundation API๋ฅผ ์ฌ์ฉํ์ ๋ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ก@OptIn(ExperimentalMaterial3Api::class)
๋ฅผ ์ ์ธํด์ฃผ๋ฉด ํด๊ฒฐ๋๋๋ฐ, ์คํ์ฉ foundation API๋ ์ญ์ ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ๊ณ ๋ คํด์ ์ฌ์ฉํด์ผ ํ๋ค.This material API is experimental and is likely to change or to be removed in the future.
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopBarEx(name: String) {
Column {
TopAppBar(
title = { Text(text = "TopAppBar") },
navigationIcon = {
IconButton(onClick = {}) {
Icon(
imageVector = Icons.Filled.ArrowBack,
contentDescription = ""
)
}
},
actions = {
IconButton(onClick = {}) {
Icon(
imageVector = Icons.Filled.Search,
contentDescription = "๊ฒ์"
)
}
IconButton(onClick = {}) {
Icon(
imageVector = Icons.Filled.Settings,
contentDescription = "์ค์ "
)
}
IconButton(onClick = {}) {
Icon(
imageVector = Icons.Filled.AccountBox,
contentDescription = "๊ณ์ "
)
}
}
)
Text(text = "Hello $name!")
}
}