๐ข design ์ฐฝ์์ ๊ธฐ๊ธฐ์ ์ ์ฒด ํ๋ฉด์ ๋ณด๊ณ ์ถ์ ๋
@Preview( showSystemUi = true)
: ์ด ์ฑ์ ์ง์ ์ ์ด๋ฉฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋น๋ํ๋ค. Android ์ฑ์์๋ onCreate( ) ํจ์๊ฐ main( ) ํจ์์ ์ญํ ์ ํ๋ค.
: onCreate( ) ํจ์ ์์ ์์ผ๋ฉฐ ๋ ์ด์์์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. @Composable ์ฃผ์์ผ๋ก ํ์๋ ๋ชจ๋ ํจ์๋ setContent( ) ํจ์ ๋๋ ๋ค๋ฅธ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์์ ํธ์ถํ ์ ์์ต๋๋ค. ์ฃผ์์ Jetpack Compose์์ ์ด ํจ์๊ฐ UI๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค๊ณ Kotlin ์ปดํ์ผ๋ฌ์ ์๋ฆฝ๋๋ค.
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ์ผ๋ฐ ํจ์์ ๋น์ทํ์ง๋ง ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์๋ค.
๋ฏธ๋ฆฌ๋ณด๊ธฐ ํจ์๊ฐ ๋๋ ค๋ฉด @Preview ์ฃผ์์ ์ถ๊ฐํด์ผ ํ๋ค. ์ ์ฒด ์ฑ์ ๋น๋ํ์ง ์๊ณ ๋ ์ฑ์ด ์ด๋ป๊ฒ ํ์๋๋์ง ํ์ธํ ์ ์๋ ํจ์์ด๋ค. @Preview ์ฃผ์์ showBackground๋ผ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ showBackground๊ฐ true๋ก ์ค์ ๋๋ฉด ์ฑ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๋ฐฐ๊ฒฝ์ด ์ถ๊ฐ๋๋ค.
Surface๋ ๋ฐฐ๊ฒฝ ์์์ด๋ ํ ๋๋ฆฌ์ ๊ฐ์ ๋ชจ์์ ๊ฐ๋ฐ์๊ฐ ๋ณ๊ฒฝํ ์ ์๋ UI ์น์ ์ ๋ํ๋ด๋ ์ปจํ ์ด๋์ด๋ค.
Surface(color = Color.Blue) {
Text(text = "Hello My name is $name!")
}
modifier = Modifier.fillMaxSize() # ํ๋ฉด ์ ์ฒด ์ฑ์ฐ๊ธฐ
modifier = Modifier.fillMaxHeight() # ๋์ด ์ ์ฒด ์ฑ์ฐ๊ธฐ
modifier = Modifier.fillMaxHeight() # ๋์ด ์ ์ฒด ์ฑ์ฐ๊ธฐ
modifier = Modifier.padding(24.dp)
๐ข Color ํจ์ ๋ถ๋ถ ์๋ฌ๋ ๋
import androidx.compose.ui.graphics.Color
์ importํ๊ณ ๋ ๋นจ๊ฐ ๋ฐ์ค์ด ๋ฌ๋ค๋ฉด Color๋ค์ ๋ง์นจํ๋ฅผ ๋ถ์ด๊ณ ์ํ๋ ์์์ ์ง์ ํด์ฃผ๋ฉด ์ฌ๋ผ์ง๋ค.
Jetpack Compose๋ Android UI๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ต์ ํดํท์ ๋๋ค. Compose๋ ์ ์ ์์ ์ฝ๋, ๊ฐ๋ ฅํ ๋๊ตฌ ๋ฐ ์ง๊ด์ ์ธ Kotlin ๊ธฐ๋ฅ์ผ๋ก Android์์ UI ๊ฐ๋ฐ์ ๊ฐ์ํํ๊ณ ๊ฐ์ํฉ๋๋ค. Compose๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ UI ์์๋ฅผ ๋ด๋ณด๋ด๋ ํจ์, ์ฆ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ผ๋ ํจ์ ์งํฉ์ ์ ์ํ์ฌ UI๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค.
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ Compose์์ UI์ ๊ธฐ๋ณธ ๋น๋ ๋ธ๋ก์
๋๋ค.
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ผ๋ฉด์ @Composable ์ฃผ์์ ๋ฌ๊ณ ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ํ์ค์นผ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค.
Compose ํจ์ ์ด๋ฆ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ช
์ฌ์ฌ์ผ ํจ: DoneButton()
๋์ฌ ๋๋ ๋์ฌ๊ตฌ์ด๋ฉด ์ ๋จ: DrawTextField()
๋ช
์ฌํ๋ ์ ์น์ฌ์ด๋ฉด ์ ๋จ: TextFieldWithLink()
ํ์ฉ์ฌ์ด๋ฉด ์ ๋จ: Bright()
๋ถ์ฌ์ด๋ฉด ์ ๋จ: Outside()
๋ช
์ฌ ์์๋ ๋ช
์ฌ๋ฅผ ์ค๋ช
ํ๋ ํ์ฉ์ฌ๋ฅผ ๋ถ์ผ ์๋ ์์: RoundIcon()
๋ฆฌ์์ค๋ ์ฝ๋์์ ์ฌ์ฉํ๋ ์ถ๊ฐ ํ์ผ๊ณผ ์ ์ ์ธ ์ฝํ ์ธ ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋นํธ๋งต, ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ฌธ์์ด, ์ ๋๋ฉ์ด์ ์ง์นจ ๋ฑ์ด ์์ต๋๋ค.
Jetpack Compose๋ Android ํ๋ก์ ํธ์ ์ ์๋ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์ R ํด๋์ค์์ ์์ฑ๋ ๋ฆฌ์์ค ID๋ก ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง์ ๋ฌธ์์ด ๋ฑ ์ ํ๋ฆฌ์ผ์ด์ ๋ฆฌ์์ค๋ ๋ ๋ฆฝ์ ์ธ ์ ์ง๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ํญ์ ์ฝ๋๋ก๋ถํฐ ๋ถ๋ฆฌํด์ผ ํฉ๋๋ค. Android๋ ๋ฐํ์์ ํ์ฌ ๊ตฌ์ฑ์ ๊ทผ๊ฑฐ๋ก ์ ์ ํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅธ UI ๋ ์ด์์์ ์ ๊ณตํ๊ฑฐ๋ ์ธ์ด ์ค์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฌธ์์ด์ ์ ๊ณตํ ์ ์์ต๋๋ค.
painterResource() ํจ์๋ ๋๋ก์ด๋ธ ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๊ณ ๋ฆฌ์์ค ID(์ด ๊ฒฝ์ฐ R.drawable.androidparty)๋ฅผ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค.
painterResource() ํจ์๋ฅผ ํธ์ถํ ํ Image ์ปดํฌ์ ๋ธ์ ์ถ๊ฐํ๊ณ image๋ฅผ ์ด๋ฆ์ด ์ง์ ๋ painter ์ธ์๋ก ์ ๋ฌํฉ๋๋ค.
๐ข Image ํจ์ ๋ถ๋ถ ์๋ฌ๋ ๋
import androidx.compose.foundation.Image
๊ณ์ ์๋ฌ๊ฐ ๋๋ค๋ฉด contentDescription = null ์ถ๊ฐ
painterResource() ํจ์๋ ๋๋ก์ด๋ธ ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๊ณ ๋ฆฌ์์ค ID(์ด ๊ฒฝ์ฐ R.drawable.androidparty)๋ฅผ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค.
val image = painterResource(R.drawable.androidparty)
Image(
painter = image,
contentDescription = null
)
โ ??? ๊ฐ๋ถ ํจ๋ฉ ??? โ
ํจ๋ฉ์ ์์ ์๋ก ์ฌ์ฉ๋๋ฏ๋ก ๋ชจ๋ ์ปดํฌ์ ๋ธ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ปดํฌ์ ๋ธ์ ๊ฐ ๋ฉด์ ๊ฒฝ์ฐ padding ์์ ์๋ ํจ๋ฉ ๊ฐ์ ์ ์ํ๋ ์ ํ์ ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Column, Row ๋ฐ Box๋ ์ปดํฌ์ ๋ธ ์ฝํ
์ธ ๋ฅผ ์ธ์๋ก ์ฌ์ฉํ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์ด๋ฏ๋ก ์ด๋ฌํ ๋ ์ด์์ ์์ ๋ด์ ํญ๋ชฉ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
Row ์ปดํฌ์ ๋ธ ๋ด์ ๊ฐ ํ์ ์์๋ ํ ํ์ ๊ฐ๋ก๋ก ๋๋ํ ๋ฐฐ์น.
Text(
text = from,
fontSize = 24.sp,
modifier = Modifier
.fillMaxWidth()
.wrapContentWidth(Alignment.End)
.padding(start = 16.dp, end = 16.dp)
)
ํ๋์ฝ๋ฉ ๋ฌธ์์ด์ ์ฑ ์ฝ๋์ ์ง์ ์์ฑ๋ ๋ฌธ์์ด์
๋๋ค. ํ๋์ฝ๋ฉ ๋ฌธ์์ด๋ก ์ธํด ์ฑ์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๊ธฐ๊ฐ ๋ ์ด๋ ต๊ณ ์ฑ์ ๋ค๋ฅธ ์์น์์ ๋ฌธ์์ด์ ์ฌ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ํ๋ญ๋๋ค. ๋ฌธ์์ด์ ๋ฆฌ์์ค ํ์ผ๋ก ์ถ์ถํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ฝ๋์์ ๋ฌธ์์ด์ ํ๋์ฝ๋ฉํ๋ ๋์ ๋ฌธ์์ด์ ํ์ผ์ ๋ฃ๊ณ ๋ฌธ์์ด ๋ฆฌ์์ค์ ์ด๋ฆ์ ์ง์ ํ ํ ๋ฌธ์์ด์ ์ฌ์ฉํ ๋๋ง๋ค ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฆ์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๋๋ผ๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
1. ๋ฌธ์์ด์ ๋๋๊ทธํ ํ ์ ๊ตฌ > Extract string resource
Resource name ์๋ ์ฐ์ผ ์ด๋ฆ์ ์ ๊ณ Resource value์๋ ์ค์ ๋ฌธ์์ด ์
๋ ฅ
์ด๋ ๊ฒ ํ๋ฉด ํ๋์ฝ๋ฉ ๋ฌธ์์ด์ด stringResource() ํจ์๋ก ๋์ฒด๋๋ค.