๋ชฉ์ฐจ
3. ์ฑ ์ค์
Android ๊ธฐ๊ธฐ๋ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ๋ก ์ ๊ณต๋๋ฉฐ ์ด๋ฌํ ํ๋ฉด์ ํฝ์ ํฌ๊ธฐ๋ ๋ค๋ฅด๋ค.
์ฆ ํ ๊ธฐ๊ธฐ์์๋ ์ ๊ณฑ ์ธ์น๋น 160ํฝ์ ์ ์ฌ์ฉํ์ง๋ง ๋ค๋ฅธ ๊ธฐ๊ธฐ์์๋ ๊ฐ์ ๊ณต๊ฐ์ 480ํฝ์ ์ ์ฌ์ฉํ๋ค. ์ด๋ฌํ ํฝ์ ๋ฐ๋์ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ์์คํ ์ด ์ด๋ฏธ์ง๋ฅผ ํ๋ํ์ฌ ํ๋ฆฟํ ์ด๋ฏธ์ง, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ ํฐ ์ด๋ฏธ์ง ๋๋ ๋ถ์ ์ ํ ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ์ป์ ์ ์๋ค.
Android ์์คํ ์์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ณด๋ค ํฐ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฌ์ง ๋ฐ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ drawble-nodpi ํด๋์ ๋ฐฐ์นํด์ผ ํฌ๊ธฐ ์กฐ์ ๋์์ด ์ค์ง๋๋ค.
4. ์ด๋ฏธ์ง ์ปดํฌ์ ๋ธ ์ถ๊ฐ
Jetpack Compose ์ ๋ฆฌ์์ค
๋ฆฌ์์ค๋ ์ฝ๋์์ ์ฌ์ฉํ๋ ์ถ๊ฐํ์ผ๊ณผ ์ ์ ์ธ ์ฝํ ์ธ ์ผ๋ก ๋นํธ๋งต, ์ฌ์ฉ์ ์ธํฐํ์ด์ค (UI) ๋ฌธ์์ด, ์ ๋๋ฉ์ด์ ์ง์นจ ๋ฑ์ด ์๋ค.
์ด๋ฏธ์ง์ ๋ฌธ์์ด ๋ฑ ์ ํ๋ฆฌ์ผ์ด์ ๋ฆฌ์์ค๋ ๋ ๋ฆฝ์ ์ธ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ํญ์ ์ฝ๋๋ก๋ถํฐ ๋ถ๋ฆฌํด์ผํ๋ค. Android๋ ๋ฐํ์์ ํ์ฌ ๊ตฌ์ฑ์ ๊ทผ๊ฑฐ๋ก ์ ์ ํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅธ UI ๋ ์ด์์์ ์ ๊ณตํ๊ฑฐ๋ ์ธ์ด ์ค์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฌธ์์ด์ ์ ๊ณตํ ์ ์๋ค.
๋ฆฌ์์ค ๊ทธ๋ฃนํ
ํญ์ ํ๋ก์ ํธ์ res/ ๋๋ ํฐ๋ฆฌ์ ์๋ ํน์ ํ์ ๋๋ ํฐ๋ฆฌ์ ๊ฐ ์ ํ์ ๋ฆฌ์์ค๋ฅผ ๋ฐฐ์นํด์ผํ๋ค.
์์ ์์์์ ๋ณผ ์ ์๋ฏ์ด res/ ๋๋ ํฐ๋ฆฌ์๋ ์ด๋ฏธ์ง ๋ฆฌ์์ค์ฉ drawable ๋๋ ํฐ๋ฆฌ, ๋ฐ์ฒ ์์ด์ฝ์ฉ mipmap/ ๋๋ ํฐ๋ฆฌ
. ๋ฌธ์์ด ๋ฆฌ์์ค์ฉ values/ ๋๋ ํฐ๋ฆฌ๊ฐ ํฌํจ๋ ํ์ ๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ํฌํจ๋์ด ์๋ค.
๋ฆฌ์์ค ์ก์ธ์ค
JetPack Compose๋ Android์ ์ ์๋ ๋ฆฌ์์ค์ ์์ธ์คํ ์ ์๋ค. ํ๋ก์ ํธ์ R ํด๋์ค์์ ์์ฑ๋ ๋ฆฌ์์ค ID๋ก ๋ฆฌ์์ค์ ์์ธ์คํ ์ ์๋ค.
R ํด๋์ค๋ Android์์ ์๋์ผ๋ก ์์ฑ๋๋ ํด๋์ค๋ก, ํ๋ก์ ํธ์ ์๋ ๋ชจ๋ ๋ฆฌ์์์ ID๋ฅผ ํฌํจํ๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฆฌ์์ค ID๋ ํ์ผ ์ด๋ฆ๊ณผ ๋์ผํ๋ค.
์๋ฅผ ๋ค์ด ์ด์ ํ์ผ ๊ณ์ธต ๊ตฌ์กฐ์ ์ด๋ฏธ์ง๋ R.drawable.graphic์ผ๋ก ์์ธ์ค๊ฐ๋ฅํ๋ค.
์ฑ ์ ๊ทผ์ฑ ํ์ธ
์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ๋น๋กฏํ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ ์ฝ๊ฒ ํ์ํ๊ณ ์ํธ์์ฉํ ์ ์๋ค.
Android ์คํ๋์ค์์ ์ ๊ณตํ๋ ํํธ์ ๊ฒฝ๊ณ ๋ฅผ ํตํด ์ฑ์ ์ ๊ทผ์ฑ์ ๊ฐ์ ํ ์ ์๋ค. ์ฝํ ์ธ ์ค๋ช ์ UI์์์ ๋ชฉ์ ์ ์ ์ํ๊ณ ์ด๋ฅผ ํตํด ์ฑ์ด TalkBack์ผ๋ก ๋ ์ ์ฉํด์ง๋ค. TalkBack์ Android ๊ธฐ๊ธฐ์ ํฌํจ๋ Google ์คํฌ๋ฆฐ ๋ฆฌ๋์ด๋ค. TalkBack์์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ์์ฑ ํผ๋๋ฐฑ์ผ๋ก ์ฌ์ฉ์๋ ํ๋ฉด์ ๋ณด์ง ์๊ณ ๋ ๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ด ์ฑ์ ์ด๋ฏธ์ง๋ ์ฅ์๋ชฉ์ ์ผ๋ก๋ง ํฌํจ๋๋ค.
์ฌ์ฉ์์๊ฒ ํ์๋๋ ์ฝํ ์ธ ์ค๋ช ์ ์ค์ ํ๋ ๋์ ์ด๋ฏธ์ง์ contentDescription ์ธ์๋ฅผ null๋ก ์ค์ ํ์ฌ TalkBack์ด Image ์ปดํฌ์ ๋ธ์ ๊ฑด๋๋ฐ๋๋ก ํ ์ ์๋ค.
Image(painter = image,contentDescription = null)
@Composable
fun BirthdayGreetingWithImage(message: String, from: String) {
val image = painterResource(R.drawable.androidparty)
Image(painter = image,contentDescription = null)
}
5. Box ๋ ์ด์์ ์ถ๊ฐ
Compose์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ํ์ค ๋ ์ด์์ ์์๋ Column , Row, Box ์ปดํฌ์ ๋ธ์ด๋ค.
Box ๋ ์ด์์์ Compose์ ํ์ค ๋ ์ด์์ ์์ ์ค ํ๋์ด๋ค. Box ๋ ์ด์์์ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์๋ก ์์ ์๋๋ค.
Box ๋ ์ด์์์ ์ฌ์ฉํ๋ฉด ํฌํจ๋ ์์์ ํน์ ์ ๋ ฌ๋ ๊ตฌ์ฑํ ์ ์๋ค.
Box๋ ์๋ ๊ฒ์ด๋ผ๊ณ ํ์ จ์!
Box {
Image(painter = image,
contentDescription = null)
BirthdayGreetingWithText(message=message,from=from)
}
Image ์์ Text ๋ถ๋ถ์ ์๋๋ค
6. ์ด๋ฏธ์ง ์ปดํฌ์ ๋ธ์ ์์น ์ง์ ๋ฐ ํฌ๊ธฐ ์กฐ์
์ด๋ฏธ์ง๋ฅผ ์ ์ฒด ํ๋ฉด ํฌ๊ธฐ๋ก ์กฐ์ ํ์ฌ ์ฑ์ ๊พธ๋ฏผ๋ค. ์ด๋ฅผ ์ํด Modifier ๋ฐ ContentsScale ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
Modifier
Jetpack Compose UI ์์๋ฅผ ์ฅ์ํ๊ฑฐ๋ ์ด ์์์ ๋์์ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
ํ์ด๋ ํ ์คํธ, ๋ฒํผ์ ๋ฐฐ๊ฒฝ์ด๋ ํจ๋ฉ, ๋์์ ์ถ๊ฐํ ์ ์๋ค. ์ด๋ฅผ ์ค์ ํ๋ ค๋ฉด ์ปดํฌ์ ๋ธ์ด Modifier ์ ๋งค๊ฐ๋ณ์๋ก ํ์ฉํด์ผํ๋ค.
Image(painter = image,
contentDescription = null,
modifier = Modifier
.fillMaxHeight())
์ปดํฌ์ ๋ธ์ ๋์ด๊ฐ ์ฌ์ฉ๊ฐ๋ฅํ ์ต๋ ๋์ด๋ก ์ค์ ๋๋ค.
modifier = Modifier
.fillMaxHeight()
.fillMaxWidth())
์ฝํ ์ธ ์กฐ์
์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ -> ์ด๋ฏธ์ง์ ๋ฐฐ์จ ์ ํ์ ์กฐ์ ํ์ฌ ์ ์ฒดํ๋ฉด์ด ๋๋๋ก ํด์ผํ๋ค.
ContentScale ์ ํ
https://developer.android.com/reference/kotlin/androidx/glance/layout/ContentScale
ContentScale.Crop ๋งค๊ฐ๋ณ์ ๋ฐฐ์จ์ ์ฌ์ฉํ๋ค. ์ด๋ ์ด๋ฏธ์ง์ ๋ข์ด์ ๋์ด๊ฐ ์์ํ๋ ํ๋ฉด์ ํฌ๊ธฐ์ ๊ฐ๊ฑฐ๋ ํฌ๋๋ก ๊ฐ๋ก์ธ๋ก ๋น์จ์ ์ก์งํ๊ธฐ ์ํด ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ๊ท ์ผํ๊ฒ ์กฐ์ ํ๋ค.
Box {
Image(painter = image,
contentDescription = null,
modifier = Modifier
.fillMaxHeight()
.fillMaxWidth(),
contentScale = ContentScale.Crop
)
7. ํ ์คํธ ์ ๋ ฌ ๋ฐ ํจ๋ฉ ์ถ๊ฐ
modifier = Modifier
.fillMaxWidth() // ์ปดํฌ์ ๋ธ์ ๋๋น๊ฐ ์ฌ์ฉ๊ฐ๋ฅํ ์ต๋ ๋๋น๋ก ์ค์ ๋๋ค.
.wrapContentWidth(Alignment.Start)
// wrapContentWidth : ์ฌ์ฉ๊ฐ๋ฅํ ํ๋ฉด ๋๋น(๋๋ ์์ ๋๋น)์ ๋ง์ถฐ ์ปดํฌ์ ๋ธ์ด ๋ํ๋๊ณ ์ ๋ ฌ๋๋ค.
// Alignment.Start : ํ
์คํธ ์ปดํฌ์ ๋ธ ๋๋ ํ์ ์์๊ฐ ํ๋ฉด์ ์์ ๋ถ๋ถ ๋๋ ์์ ์์์ ๋ง์ถฐ ์ ๋ ฌ๋๋ค.
์ฐจ์ด๋ฅผ ์ ๋ชจ๋ฅด๊ฒ ๋ค..
padding
UI์์๋ ์ฝํ ์ธ ์ฃผ์๋ก ๋ํ์ด ๋๋ค. ๋๋ฌด ๋น์ข๊ฒ ๋ํ๋์ง ์๋๋ก ๊ฐ ๋ฉด์ ํจ๋ฉ ๊ฐ์ ์ง์ ํ ์ ์๋ค.
ํจ๋ฉ์ Modifier๋ก ์ฌ์ฉ๋๋ฏ๋ก ๋ชจ๋ ์ปดํฌ์ ๋ธ์ ์ ์ฉํ ์ ์๋ค. ์ปดํฌ์ ๋ธ์ ๊ฐ ๋ฉด์ ๊ฒฝ์ฐ padding ์์ ์๋ ํจ๋ฉ ๊ฐ์ ์ ์ํ๋ ์ ํ์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ค.
8. ์ ์ ํ ์ฝ๋ ์ฌ๋ก ์ฑํ
๋ฒ์ญ
ํ๋์ฝ๋ฉ ๋ฌธ์์ด : ์ฑ ์ฝ๋์ ์ง์ ์์ฑ๋ ๋ฌธ์์ด
ํ๋์ฝ๋ฉ ๋ฌธ์์ด๋ก ์ธํด ์ฑ์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๊ธฐ๊ฐ ๋ ์ด๋ ต๊ณ ์ฑ์ ๋ค๋ฅธ ์์น์์ ๋ฌธ์์ด์ ์ฌ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ํ๋ค๋ค. -> ๋ฌธ์์ด์ ๋ฆฌ์์ค ํ์ผ๋ก ์ถ์ถํ์ฌ ํด๊ฒฐ ๊ฐ๋ฅ
์ฝ๋์์ ๋ฌธ์์ด์ ํ๋์ฝ๋ฉํ๋ ๋์
๋ฌธ์์ด์ ํ์ผ์ ๋ฃ๊ณ ๋ฌธ์์ด ๋ฆฌ์์ค์ ์ด๋ฆ์ ์ง์ ํ ํ ๋ฌธ์์ด์ ์ฌ์ฉํ ๋๋ง๋ค ์ด๋ฆ์ ์ฌ์ฉํ๋ค. ์ด๋ฆ์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๋๋ผ๋ ๋์ผํ๊ฒ ์ ์ง๋๋ค.
strings.xml ํ์ผ์๋ ์ฌ์ฉ์๊ฐ ์ฑ์์ ๋ณด๋ ๋ฌธ์์ด ๋ชฉ๋ก์ด ์๋ค. ์ฑ ์ด๋ฆ๋ ๋ฌธ์์ด ๋ฆฌ์์ค์ป.
๋ฌธ์์ด์ ๋ชจ๋ ํ ๊ณณ์ ๋ฐฐ์นํ๋ฉด ์ฑ์ ๋ชจ๋ ํ ์คํธ๋ฅผ ๋ ์ฝ๊ฒ ๋ฒ์ญํ๊ณ ์ฑ์ ๋ค์ํ ๋ถ๋ถ์์ ๋ฌธ์์ด์ ๋ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์๋ค.
9. ๋์ ๊ณผ์
Alignment.Horizontally
Alighment ๋?
Jetpack Compose์ Alignment๋ View์ ์ ๋ ฌ์ ์ง์ํด์ฃผ๋ ๋ณ์์ด๋ค. ์ฆ, ๋ชจ๋ View๊ฐ ๋์ผํ x์ถ ํน์ y์ถ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋๋๋ก ๋ง๋๋ ๋ณ์์ด๋ค.
Column์ Alighment
Column์ ์์ View๋ค์ ์์ง์ผ๋ก ๋ฐฐ์น๋๋ฏ๋ก ์ํ์ผ๋ก ์ ๋ ฌ(horizontal Alignment) ์ด ์ง์๋๋๋ฐ
์ํ ์ ๋ ฌ์ ๋ชจ๋ ์์ View๋ค์ x์์น๊ฐ ๋์ผํ๋๋ก ๋ง๋ค์ด์ฃผ๋ ์ ๋ ฌ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ y์ถ ์์ ์ ๋ ฌ๋๋ค.
Column์์ ์ฌ์ฉํ ์ ์๋ Alignment์ ์ข ๋ฅ
Alignment.Start(์ผ์ชฝ ์ ๋ ฌ)
Alignment.CenterHorizontally (์ค์ ์ ๋ ฌ)
Alignment.End(์ค๋ฅธ์ชฝ ์ ๋ ฌ)
Column (horizontalAlignment = Alignment.CenterHorizontally)
์์ฝ
Android ์คํ๋์ค์ Resource Manager ํญ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ๊ธฐํ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ๊ณ ๊ตฌ์ฑํ ์ ์๋ค.
Image ์ปดํฌ์ ๋ธ์ ์ฑ์ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๋ UI์์์ด๋ค.
Image ์ปดํฌ์ ๋ธ์ ์ฝํ ์ธ ์ค๋ช ์ด ์์ด์ผ ์ฑ์ ์ ๊ทผ์ฑ์ด ๋์์ง๋ค.
์์ผ ์ถํ ๋ฉ์์ง์ ๊ฐ์ด ์ฌ์ฉ์์๊ฒ ํ์๋๋ ํ ์คํธ๋ ์ฑ์ ๋ค๋ฅธ ์ธ์ด๋ก ์ฝ๊ฒ ๋ฒ์ญํ ์ ์๋๋ก ๋ฌธ์์ด ๋ฆฌ์์ค๋ฅผ ์ถ์ถํด์ผํ๋ค.
'2023 ์๋๋ก์ด๋ > ์๋๋ก์ด๋ ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
taskmanager (0) | 2022.12.26 |
---|---|
HappyBirthdayCard ์ฝ๋ (0) | 2022.12.24 |
Unit1- Jetpack Compose๋ ๋ฌด์์ธ๊ฐ์? (0) | 2022.12.24 |
4.Compose ์ฌ๋ถ๋ฉด (0) | 2022.11.17 |
์ฐ์ต: Compose ๊ธฐ๋ณธ ์ฌํญ (0) | 2022.11.17 |