๋ชฉ์ฐจ
3. ํ ์คํธ ์ปดํฌ์ ๋ธ๋ก ๊ฐ๋จํ ์ฑ ๋น๋
1. ์์ํ๊ธฐ ์ ์
Jetpack Compose๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ์์ผ ์ถํ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ๊ฐ๋จํ android ์ฑ์ ๋น๋ํฉ๋๋ค.
3. Happy Birthday ์ฑ ์ค์
Empth Compose Activity ํ ํ๋ฆฟ์ผ๋ก Happy Birthday ์ฑ์ ๋ง๋ค๋ฉด Android ์คํ๋์ค์์๋ ํ๋ฉด์ ํ์๋๋
Hello Android! ๋ฉ์์ง๋ฅผ ๋น๋กฏํ์ฌ ๊ธฐ๋ณธ Android ์ฑ์ ๋ฆฌ์์ค๋ฅผ ์ค์ ํ๋ค.
์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋?
์ฑ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ ํ๋ฉด์ ํ์๋๋ ํ ์คํธ, ์ด๋ฏธ์ง, ๋ฒํผ, ๊ธฐํ ์ฌ๋ฌ ์ ํ์ ์์ ๋ฐ ํ๋ฉด์ ํ์๋๋ ๋ฐฉ์
์ฆ, ์ฑ์ด ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉ์์๊ฒ ํ์ํ๋ ๋ฐฉ์์ด์ ์ฌ์ฉ์๊ฐ ์ฑ๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ฌํ ๊ฐ๊ฐ์ ์์๋ฅผ UI ๊ตฌ์ฑ์์๋ผ๊ณ ํ๋ค.
์ฑ ํ๋ฉด์ ํ์๋๋ ๋๋ถ๋ถ์ ๋ด์ฉ์ UI ์์์ด๋ค.
UI์์๋ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ์์(EX. ํด๋ฆญ๊ฐ๋ฅํ ๋ฒํผ, ํธ์ง ๊ฐ๋ฅํ ์ ๋ ฅ๋) ๊ฐ ๋ ์๋ ์๊ณ ์ฅ์์ฉ ์ด๋ฏธ์ง๊ฐ ๋ ์๋ ์๋ค
4. Jetpack Compose๋?
Jetpack Compose๋ Android UI๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ต์ ํดํท์ด๋ค.
Compose๋ ์ ์ ์์ ์ฝ๋, ๊ฐ๋ ฅํ ๋๊ตฌ ๋ฐ ์ง๊ด์ ์ธ Kotlin ๊ธฐ๋ฅ์ผ๋ก Android์์ UI๊ฐ๋ฐ์ ๊ฐ์ํํ๊ณ ๊ฐ์ํ๋ค.
Compose ์ฌ์ฉ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ UI์์๋ฅผ ๋ด๋ณด๋ด๋ ํจ์ , ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์(composable function)๋ผ๋ ํจ์ ์งํฉ์ ์ ์ํ๋ฉฐ UI๋ฅผ ๋น๋ํ ์ ์๋ค.
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์ composable function
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ Compose์์ UI์ ๊ธฐ๋ณธ ๋น๋ ๋ธ๋ก์ด๋ค.
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์ ํน์ง
- UI ์ผ๋ถ๋ฅผ ์ค๋ช ํ๋ค
- ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋ค.
- ๋ช ๊ฐ์ ์ ๋ ฅ์ ๋ฐ์์ ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ์ ์์ฑํ๋ค.
- ์ฌ๋ฌ UI ์์๋ฅผ ๋ด๋ณด๋ผ ์๋ ์๋ค.
์ฃผ์
์ฃผ์์ ์ฝ๋์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ฒจ๋ถํ๋ ๋ฐฉ๋ฒ์ด๋ค. Jetpack Compose ์ปดํ์ผ๋ฌ์ ๊ฐ์ ๋๊ตฌ ๋ฐ ๋ค๋ฅด๊ฐ๋ฐ์๊ฐ ์ฑ์ ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ค.
์ฃผ์์ @๋ฌธ์๋ฅผ ์ด๋ฆ์ ์ ๋์ฌ๋ก ์ถ๊ฐํ์ฌ ์ ์ฉ๋๋ค. where? ์ฃผ์ ์ฒ๋ฆฌํ๊ณ ์๋ ์ ์ธ์ ์์ ๋ถ๋ถ์
@Composable
// Example code, do not copy it over
@Json
val imgSrcUrl: String
@Volatile
private var INSTANCE: AppDatabase? = null
๋งค๊ฐ ๋ณ์๊ฐ ์๋ ์ฃผ์
์ฃผ์์ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐ์ ์ ์๋ค. ๋งค๊ฐ ๋ณ์๋ ์ฃผ์์ ์ฒ๋ฆฌํ๋ ๋๊ตฌ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์ ์
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ @Composable ์ฃผ์์ผ๋ก ์ฃผ์ ์ฒ๋ฆฌ ๋๋ค. ๋ชจ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์๋ ์ด ์ฃผ์์ด ์์ด์ผ ํ๋ค.
์ด ์ฃผ์์ ํตํด ์ด ํจ์๊ฐ ๋ฐ์ดํฐ๋ฅผ UI๋ก ๋ณํํ๊ฒ ๋์ด ์๋ค๋ ๊ฒ์ Compose ์ปดํ์ผ๋ฌ์๊ฒ ์๋ฆฐ๋ค.
cf) ์ปดํ์ผ๋ฌ: ์์ฑํ ์ฝ๋๋ฅผ ํ ์ค์ฉ ๋ณด๊ณ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ํน์ ํ๋ก๊ทธ๋จ
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
์ ๋ฌ๋ ๋งค๊ฐ๋ณ์ name์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ํ ์คํธ ์์๋ฅผ ๋ ๋๋งํ๋ ๊ตฌ์ฑ๊ฐ๋ฅํ ํจ์์ ์
์ฐธ๊ณ ์ฌํญ
- ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ์ฌ ์ฑ ๋ก์ง์ด UI๋ฅผ ์ค๋ช ํ๊ฑฐ๋ ์์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
์์ ๊ฒฝ์ฐ UI์์๊ฐ String์ ํ์ฉํ๋ฏ๋ก ์ฌ์ฉ์์๊ฒ ์ด๋ฆ์ ์ธ์ฌํ ์ ์๋ค.
- ํจ์๋ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋ค. UI๋ฅผ ๋ด๋ณด๋ด๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ UI ์์๋ฅผ ๊ตฌ์ฑํ๋ ๋์ ์ํ๋ ํ๋ฉด ์ํใ กใน ๊ธฐ์ ํ๋ฏ๋ก ๋ฐํํ ๋ด์ฉ์ด ์๋ค.. ์ฆ, ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ UI๋ฅผ ๊ธฐ์ ํ์ง๋ง UI๋ฅผ ๊ตฌ์ฑํ๊ฑฐ๋ ๋ง๋ค์ง ์์ผ๋ฏ๋ก ๋ฐํํ ํญ๋ชฉ์ด ์๋ค.
์ฝ๋์ ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์ ํ์ธ
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
HappyBirthdayTheme {
Greeting("Android")
}
}
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์ BirthdayCardPreview()
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ๋ค๋ฅธ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
์ด ์ฝ๋ ์ค๋ํซ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํจ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์ Greeting() ์ ํธ์ถํ๊ณ ์๋ค.
์ฝ๋ ์ค๋ํซ ???
์๋์์ฑ ๊ธฐ๋ฅ?? ๋ฌด์จ ๋ง์ด์ง ??
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์ ์ด๋ฆ
์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ผ๋ฉด์ @Composable ์ฃผ์์ ๋ฌ๊ณ ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ํ์ค์ปฌ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด๋ฆ ์ง์
ํ์ค์นผ ํ๊ธฐ๋ฒ: ๋ณตํฉ์ด์์ ๊ฐ ๋จ์ด์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐํ๋ ๋ช ๋ช ๊ท์นํ์ค์นผ ํ๊ธฐ๋ฒ๊ณผ ์นด๋ฉ ํ๊ธฐ๋ฒ ์ ์ฐจ์ด ํ์ค์นผ ํ๊ธฐ๋ฒ์ ๋ชจ๋ ๋จ์ด๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐ์นด๋ฉ ํ๊ธฐ๋ฒ์ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ ๋๋ฌธ์๋ก ํ๊ธฐ x
Composeํจ์ ์ด๋ฆ์ ํน์ง
5. Android ์คํ๋์ค์ Design ์ฐฝ
๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ํจ์๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋๋ก ๋งค๊ฐ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํด์ผํ๋ค.
Greeting() ํจ์๋ฅผ ์ง์ ๋ฏธ๋ฆฌ ๋ณผ ์ ๋ ์๋ค. ๋์ ์ ์ ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Greeting()ํจ์๋ฅผ ํธ์ถํ๋ ๋ค๋ฅธ ํจ์๋ฅผ ์ถ๊ฐํด์ผํ๋ค. ์ฌ๊ธฐ์๋ BirthdayCardPreview()์ด๋ค .
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
BirthdayCardTheme {
Greeting("Android")
}
}
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
HappyBirthdayTheme {
Greeting("James")
}
}
6. ์ ํ ์คํธ ์์ ์ถ๊ฐ
package com.example.happybirthday
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.happybirthday.ui.theme.HappyBirthdayTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HappyBirthdayTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background){
}
}
}
}
}
@Composable
fun BirthdayGreetingWithText(message: String) {
Text(text = message)
// ํ
์คํธ ๋ฉ์์ง๋ฅผ ์ด๋ฆ์ด ์ง์ ๋ ์ธ์๋ก ์ ๋ฌํ๋ Text() ์ปดํฌ์ ๋ธ ์ถ๊ฐ
}
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
HappyBirthdayTheme {
BirthdayGreetingWithText(message = "Happy Birthday Sam!")
}
}
7. ๊ธ๊ผด ํฌ๊ธฐ ๋ณ๊ฒฝ
ํ์ฅ ๊ฐ๋ฅํ ํฝ์ (SP)๋ ๊ธ๊ผด ํฌ๊ธฐ์ ์ธก์ ๋จ์
Android ์ฑ์ UI ์์๋ ๋ ๊ฐ์ง ์ธก์ ๋จ์๋ฅผ ์ฌ์ฉ
1) DP : density independent pixel : ๋ ์ด์์์ ์ฌ์ฉ
2) SP : scalable pixels : DP๋จ์์ ํฌ๊ธฐ๊ฐ ๋์ผํ์ง๋ง, ์ฌ์ฉ์๊ฐ ํด๋์ ํ ์ค์ ์์ ์ ํํ ์ ํธํ๋ ํ ์คํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ค.
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.sp
import com.example.happybirthday.ui.theme.HappyBirthdayTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HappyBirthdayTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background){
}
}
}
}
}
@Composable
fun BirthdayGreetingWithText(message: String) {
Text(
text = message,
fontSize = 36.sp
)
// ํ
์คํธ ๋ฉ์์ง๋ฅผ ์ด๋ฆ์ด ์ง์ ๋ ์ธ์๋ก ์ ๋ฌํ๋ Text() ์ปดํฌ์ ๋ธ ์ถ๊ฐ
}
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
HappyBirthdayTheme {
BirthdayGreetingWithText(message = "Happy Birthday Sam!")
}
}
8. ๋ค๋ฅธ ํ ์คํธ ์์ ์ถ๊ฐ
์ด๋ฆ์ผ๋ก ์นด๋์ ์๋ช ํ๋ ์์ ์ ํด๋ณด์
์์ ํ ๋ถ๋ถ
@Composable
fun BirthdayGreetingWithText(message: String, from: String) {
Text(
text = message,
fontSize = 32.sp,
)
Text(
text = from,
fontSize = 24.sp
)
// ํ
์คํธ ๋ฉ์์ง๋ฅผ ์ด๋ฆ์ด ์ง์ ๋ ์ธ์๋ก ์ ๋ฌํ๋ Text() ์ปดํฌ์ ๋ธ ์ถ๊ฐ
}
Text ์ถ๊ฐํ ๋ ์์ ์๋ ๊ธฐ์กด์ Text ๋ถ๋ถ์ from์ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋๋ผ, ์๋ก Text()๋ฅผ ๋ง๋ค์ด์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.sp
import com.example.happybirthday.ui.theme.HappyBirthdayTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HappyBirthdayTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background){
}
}
}
}
}
@Composable
fun BirthdayGreetingWithText(message: String, from: String) {
Text(
text = message,
fontSize = 32.sp,
)
Text(
text = from,
fontSize = 24.sp
)
// ํ
์คํธ ๋ฉ์์ง๋ฅผ ์ด๋ฆ์ด ์ง์ ๋ ์ธ์๋ก ์ ๋ฌํ๋ Text() ์ปดํฌ์ ๋ธ ์ถ๊ฐ
}
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
HappyBirthdayTheme {
BirthdayGreetingWithText(message = "Happy Birthday Sam!", "- from Emma")
}
}
9. ํ๊ณผ ์ด์ ํ ์คํธ ์์ ์ ๋ ฌ
UI ๊ณ์ธต ๊ตฌ์กฐ๋ ํฌํจ์ ๊ธฐ๋ฐํ๋ค.
์ฆ, ํ ๊ตฌ์ฑ ์์๋ ํ๋ ์ด์์ ๊ตฌ์ฑ์์๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ ์์ ์์ ๋ฐ ํ์ ์์๋ผ๋ ์ฉ์ด๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
context๋ ์์ UI์์๊ฐ ํ์ UI์์๋ฅผ ํฌํจํ๋ ๊ฒ์ด๋ฉฐ, ์ด ํ์ UI์์๋ ํ์ UI์์๋ฅผ ์ฐจ๋ก๋ก ํฌํจํ ์ ์๋ค.
Compose์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ํ์ค ๋ ์ด์์ ์์
1) column composable
2) row composable
3) box composable
column, row, boxsms composable ์ฝํ ์ธ ๋ฅผ ์ธ์๋ก ์ฌ์ฉํ๋ composable function์ด๋ฏ๋ก ์ด๋ฌํ ๋ ์ด์์ ์์ ๋ด์ ํญ๋ชฉ์ ๋ฐฐ์น ํ ์ ์๋ค.
@Composable
fun BirthdayGreetingWithText(message: String, from: String) {
Row {
Text("First column")
Text("Second column")
}
// ํ
์คํธ ๋ฉ์์ง๋ฅผ ์ด๋ฆ์ด ์ง์ ๋ ์ธ์๋ก ์ ๋ฌํ๋ Text() ์ปดํฌ์ ๋ธ ์ถ๊ฐ
}
์ด ๋ถ๋ถ๋ง ์์ ํด์ฃผ๊ณ refresh & build ํด์ฃผ์๋ค.
ํํ ๋๋ค ๋ฌธ๋ฒ -> ์์ง ์ ๋ชจ๋ฅด๊ฒ ์ด
Row์ ๊ดํธ ๋์ ์ค๊ดํธ๊ฐ ์ฌ์ฉ๋์๋ค. ์ด๋ฅผ ํํ ๋๋ค ๋ฌธ๋ฒ์ด๋ผ๊ณ ํ๋ค.
์ผ๋จ compose ๋ฌธ๋ฒ์ ์ต์ํด์ง๊ธฐ!
Kotlin์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ํจ์์ผ ๋ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ํจ์์ ์ ๋ฌํ๋ ํน์ํ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ค.
ํจ์๋ฅผ ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ ค๋ฉด ํํ ๋๋ค ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํจ์๋ฅผ ๊ดํธ์์ ํจ์ ์ด๋ฆ๊ณผ ํจ๊ป ๋ฃ๋ ๋์ ํจ์ ์ด๋ฆ ๋ค์ ๊ดํธ๋ฅผ ๋ฃ๋๋ค.
Row()์ ๋ง์ง๋ง ๋งค๊ฐ ๋ณ์๋ ํ์ UI์์๋ฅผ ๋ด๋ณด๋ด๋ ํจ์์ธ content ๋งค๊ฐ๋ณ์์ด๋ค.
Row(
content = {
Text("Some text")
Text("Some more text")
Text("Last text")
}
)
content ๋งค๊ฐ ๋ณ์๋ ํจ์ ์๋ช ์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์์ด๋ฉฐ ๋๋ค ํํ์์ผ๋ก ๊ฐ์ ์ ๋ฌํ๋ค.
๋ฐ๋ผ์ content ๋งค๊ฐ๋ณ์์ ๊ดํธ๋ฅผ ์ญ์ ๊ฐ๋ฅ ??
Row {
Text("Some text")
Text("Some more text")
Text("Last text")
}
ํ๋์ ํ์ ํ ์คํธ ์์ ์ ๋ ฌ
ํ ์คํธ ์์๊ฐ ๊ฒน์น๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฑ์ ํ ์คํธ ์์๋ฅผ ํ ํ์ ์ ๋ ฌ
@Composable
fun BirthdayGreetingWithText(message: String, from: String) {
Row{
Text(
text = message,
fontSize = 32.sp,
)
Text(
text = from,
fontSize = 24.sp
)
}
// ํ
์คํธ ๋ฉ์์ง๋ฅผ ์ด๋ฆ์ด ์ง์ ๋ ์ธ์๋ก ์ ๋ฌํ๋ Text() ์ปดํฌ์ ๋ธ ์ถ๊ฐ
}
๋ก ์์ ํด์ค๋ค.
๋ ๊ฐ์ ํ ์คํธ์์๊ฐ ์๋ ์ด์ ํ์ํ๋๋ก ํ ์คํธ ์์ ์ฃผ์์ Row composable์ ์ถ๊ฐํ๋ค.
์ด์ ๊ฒน์น๋ ๋ถ๋ถ์ ์๋ค. ํ์ง๋ง ์๋ช ํ ๊ณต๊ฐ์ด ์ถฉ๋ถ์น ์๋ค.
ํ ์คํธ ์์๋ฅผ ํ๋์ ์ด์ ์ ๋ ฌํด๋ณด์
ํ๋์ ์ด์ ํ ์คํธ ์์ ์ ๋ ฌ
์ ์ฝ๋์์ Row๋ฅผ Column์ผ๋ก ๋ฐ๊พธ๋ฉด ๋๋ค.
@Composable
fun BirthdayGreetingWithText(message: String, from: String) {
Column {
Text(
text = message,
fontSize = 36.sp,
)
Text(
text = from,
fontSize = 24.sp,
)
}
}
10. ๊ธฐ๊ธฐ์ ํ์ํ๊ธฐ
ํจ์๋ก ์คํฌ๋กคํ๊ธฐ ๊ฐ ๋ญ ํ๋ผ๋ ๊ฑธ๊น์ ??
์ด ๋ ๊ถ๊ธํ ๊ฒ xml ๋ง๊ณ jetpack compose์ผ๋ก ํ์์์
๊ทผ๋ฐ xml์ผ๋ก ๊ณต๋ถ๋ฅผ ํ ๋๋ ํญ์ empty activity๋ฅผ ๋ง๋ค์ด ์คฌ๋๋ฐ
compose๋ก ํ๋๊น empty compose activity๋ฅผ ๋ง๋ค๋ผ๊ณ ํ๋๋ผ๊ตฌ์???
jetpack compose๋ฅผ ์ฌ์ฉํ ๋ ค๋ฉด ํญ์ empty compose activity๋ก ์์ฑํด์ค์ผํ๋๊ฑด๊ฐ์?
์์ฝ
1) Jetpack Compose๋ Android UI๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ต์ ๋๊ตฌ ํค๋์ด๋ค.
Jetpack Compose๋ ๋ ์ ์ ์์ ์ฝ๋, ๊ฐ๋ ฅํ ๋๊ตฌ, ์ง๊ด์ ์ธ Kotlin API๋ก Android ์์์ UI๊ฐ๋ฐ์ ๊ฐ์ํ & ๊ฐ์ํ
2) ์ฑ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค (UI)๋ ํ๋ฉด์ ํ์๋๋ ํ ์คํธ, ์ด๋ฏธ์ง, ๋ฒํผ, ๊ธฐํ ์ฌ๋ฌ ์ ํ์ ์์์ด๋ค.
3) ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์ composable ํจ์๋ Compose์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ด๋ค. ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ UI์ ์ผ๋ถ๋ฅผ ์ค๋ช ํ๋ ํจ์์ด๋ค.
4) ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ @Composable ์ฃผ์์ผ๋ก ์ฃผ์์ฒ๋ฆฌ๋๋ค. ์ด ์ฃผ์์ ์ด ํจ์๊ฐ ๋ฐ์ดํฐ๋ฅผ UI๋ก ๋ณํํ๋ค๋ ๊ฒ์ Compose ์ปดํ์ผ๋ฌ์ ์๋ ค์ค๋ค
5) Compose์ ์ธ ๊ฐ์ง ํ์ค ๋ ์ด์์ ์์๋ Column, Row, Box ์ด๋ค
์ด๋ฌํ ์์๋ ์ปดํฌ์ ๋ธ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์ด๋ฏ๋ก ๋ด๋ถ์ ํญ๋ชฉ์ ๋ฐฐ์นํ ์ ์๋ค.
Row ๋ด์ ๊ฐ ํ์ ์์๋ ๊ฐ๋ก๋ก ๋๋ํ ๋ฐฐ์น๋๋ค.
'2023 ์๋๋ก์ด๋ > ์๋๋ก์ด๋ ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android ์ฑ์ ์ด๋ฏธ์ง ์ถ๊ฐ 6~ (0) | 2022.11.16 |
---|---|
Android ์ฑ์ ์ด๋ฏธ์ง ์ถ๊ฐ ~5 (0) | 2022.11.16 |
์ฒซ Android ์ฑ ๋ง๋ค๊ธฐ (0) | 2022.11.15 |
์ฒซ ๋ฒ์งธ Android ์ฑ ๋ง๋ค๊ธฐ 5 (0) | 2022.11.15 |
์ฐ์ต๋ฌธ์ (0) | 2022.11.15 |