#1 ๊ฐ์
#1-1 ์ํํธ์ฝ๋ฉ ๊ฐ์
์ง๊ธ๊น์ง๋ +๋ฒํผ์ ๋๋ฅด๋ฉด, ํ์ฌ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก (ํ๋์ฝ๋ฉ๋) ๋๋ฏธ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ DayMealView ๋ ์ฝ๋๊ฐ INSERT๋์๋ค. ์ด์ ๋ View์์ ์ฌ์ฉ์๊ฐ ์๊ฐ ๋ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ์ํํธ์ฝ๋ฉํ์ฌ ViewModel๋ก ์ ์กํ ์ ์๊ฒ ๋ง๋ค์ด๋ณธ๋ค.
#1-2 ์ฑํ UI๋ฅผ ์ํ '์ฑํ ' ์ ๋ ฅ ์ฐฝ
Nutri Capture ๋ฐฉํฅ์ฑ - ์ฑํ UI
#1 ๊ธฐ์กด UI ๋นํ#1-1 ์คํฌ๋ฆฐ์ท์ง๊ธ๊น์ง ์งํํ ํ๋ก์ ํธ์ ์คํฌ๋ฆฐ์ท์ด๋ค. ์๋๋ ์ด ํ๋ฉด์ ๋ฌธ์ ์ ๋ค์ด๋ค. #1-2 ์ค์ฒฉ๋ Container'๋ ์ง ์นด๋' Container ์์๋ '์๋จ' Container๊ฐ ๋ค์ด๊ฐ๋๋ฐ, ์ด๋ ๊ฒ ํฌ์ฅ
kenel.tistory.com
์ด์ ์ ๊ณํํ ๋ฐฉํฅ๋๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๋ค. ์ฑํ UI์ด๋ฏ๋ก ์์ ๋ฐ์ดํฐ๋ฅผ INSERTํ๋ ๋ฐฉ์์ ํ๋จ์ ๊ณ ์ ๋์ด์์ '์ฑํ ๋ฐ'๋ฅผ ํตํด์ ์ด๋ค์ง ๊ฒ์ด๋ค.
#1-3 ๊ธฐ์กด UI์์ ์ถฉ๋
๋ฌธ์ ๋ ์ด๋ฏธ ํ๋จ์ NavigationBar๊ฐ ์กด์ฌํ๋ค๋ ์ ์ด๋ค. ํ๋จ ๋ฐ๊ฐ 2๊ฐ๋ ์์ผ๋ฉด ๋ณด๊ธฐ์๋ ์ ์ข์ ๋ฟ๋๋ฌ, ๋ฌด์๋ณด๋ค ์ฌ์ฉ์ ์ ์ฅ์์ ํท๊ฐ๋ฆฐ๋ค. ์ฐ์ ์์๋ฅผ ๋ฐ์ง์๋ฉด ํ๋จ์ ๋ ์กด์ฌํ ๋ฒํ ์ค๋ธ์ ํธ๋ '์ฑํ ๋ฐ'๋ค. NavigationBar๊ฐ ์ํํ๋ ๊ธฐ๋ฅ์ ์๋ง TopAppBar()๋ก ์ฎ๊ธธ ๊ฒ ๊ฐ๋ค. ์ด ๊ฒฐ์ ์ ์ถํ์ ๋ณ๊ฒฝ๋ ์๋ ์๋ค. ๊ทธ ๊ธฐ์ค์ ์ธ์ ๋ ์ฌ์ฉ์ ๊ฒฝํ์ด๋ค.
#1-4 Scaffold์ bottomBar ๋ถ๊ธฐํ
[Android] Jetpack Compose - Scaffold
#1 ๊ฐ์#1-1 Scaffold์ ์ฌ์ ์ ์๋ฏธScaffold๋ ๋น๊ณ((๊ฑด์ค) ๋์ ๊ณณ์์ ๊ณต์ฌ๋ฅผ ํ ์ ์๋๋ก ์์๋ก ์ค์นํ ๊ฐ์ค๋ฌผ)๋ผ๋ ๋จ์ด๋ก ๋ฒ์ญ๋๋ค. #1-2 Scaffold in Jetpack Compose Jetpack Compose | Android Developers์ด
kenel.tistory.com
NutrientScreen์ ํ์ํ๋ ๊ฒฝ์ฐ BottomAppBar()๋ฅผ, ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด์ ๋ง๋ค์ด๋์๋ NavigationBar()๋ฅผ ์ฌ์ ํ ํ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
#2 ์ฝ๋
#2-1 currentBackStackEntryAsState()
Compose๋ฅผ ์ฌ์ฉํ ํ์ | Jetpack Compose | Android Developers
์ด ํ์ด์ง๋ Cloud Translation API๋ฅผ ํตํด ๋ฒ์ญ๋์์ต๋๋ค. Compose๋ฅผ ์ฌ์ฉํ ํ์ ์ปฌ๋ ์ ์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์. Navigation ๊ตฌ์ฑ์์๋ Jetpack Compose
developer.android.com
๊ณต์ ๋ฌธ์์์ Compose์ ํ๋ฉด ์ ํ(Navigation)๊ณผ bottomBar๋ฅผ ์ฐ๊ฒฐ์ง์ผ๋ ค๋ฉด, "currentBackStackEntryAsState() ํจ์๋ฅผ ์ฌ์ฉ"ํ๋ผ๊ณ ํ๋ค (์ฐธ๊ณ : NavBackStackEntry). ์ ๊ณต์ ๋งํฌ์ ์ฝ๋ ์ค๋ํซ์์ ์ปดํฌ์ ๋ธ BottomNavigation()์์ currentBackStackEntryAsState()๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ๋ ํ ๊ณ์ธต ์๋ก ์ฌ๋ผ๊ฐ Scaffold์์ currentBackStackEntryAsState()๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
#2-2 Recomposition์ ํตํ bottomBar ๋์ ๋ณ๊ฒฝ
// in MainActivity.kt
...
class MainActivity : ComponentActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
...
setContent {
NutricapturenewTheme {
// Navigation ๊ด๋ฆฌ์ ์ฃผ์ฒด
val navController = rememberNavController()
val navBackStackEntry = navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry.value?.destination?.route
...
Scaffold(
...
bottomBar = {
when(currentRoute) {
Destination.NutrientScreen.route -> BottomAppBar { Text("test") }
else -> MainNavigationBar(navController)
}
},
...
) { ... ->
...
}
}
}
}
@Composable
private fun MainNavigationBar(navController: NavHostController) {
...
}
}
...
ํต์ฌ์ currentBackStackEntryAsState()๋ค. ์์ผ๊น? ์ด๋ฆ์๋ ๋์์์ง๋ง, currentBackStackEntryAsState()๋ State๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค. State๋ Recomposition์ ์ ๋ฐํ๋ค. ๋ฐ๋ผ์, State์ธ navBackStackEntry์์ ํ์๋ ๋ณ์์ธ currentRoute ๋ํ Recomposition์ ์ํ '๊ฐ์ ๋์'์ด ๋๋ค. ์ด๋ ์ ์ฝ๋์ ์๋ when ๋ถ๊ธฐ๋ฌธ์์๋ ์ ์ฉ๋๋ค. ๋ง์ฝ, currentRoute๊ฐ State์ ์ฐ์ด ์๋ ๋ณ์์๋ค๋ฉด ๋ด๊ฐ ์๋ํ ๋๋ก ๋ถ๊ธฐ๋ฌธ์ด ์๋ํ์ง ์๋๋ค (์ค์ ๋ก ํด๋ณธ ๊ฒฐ๊ณผ, ๋ถ๊ธฐ๋ฌธ์ด Activity์ ์์ ์ฃผ๊ธฐ์์ ๋ฑ ํ ๋ฒ ์คํ๋๊ณ ์ดํ๋ก๋ ์คํ๋์ง ์๋๋ค).
#3 ์์ฝ
Recomposition์ ์ด์ฉํด, Destination์ ๋ฐ๋ผ bottomBar๊ฐ ๋์ ํ ๋น๋๊ฒ ๋ง๋ค์๋ค.
#4 ์์ฑ๋ ์ฑ
#4-1 ์คํฌ๋ฆฐ์ท
๋ค์ ๊ฒ์๊ธ๋ถํฐ "test" ๋ถ๋ถ์ ์ฑํ ์ฐฝ์ ๊ตฌํํ๋ค.
#4-2 ์ด ๊ฒ์๊ธ ์์ ์ Commit
GitHub - Kanmanemone/nutri-capture-new
Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.
github.com
#4-3 ๋ณธ ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ต์ Commit
GitHub - Kanmanemone/nutri-capture-new
Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.
github.com
'๊ฐ๋ฐ ์ผ์ง ๐ป > Nutri Capture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nutri Capture ํ๋ก ํธ์๋ - Dimens์ ํจ๊ป ChatBar ๋ง๋ค๊ธฐ (0) | 2024.12.31 |
---|---|
Nutri Capture ํ๋ก ํธ์๋ - Typography (2) | 2024.12.28 |
Nutri Capture ๋ฐฑ์๋ - ์ด์ง ํ์ ์ ์ฉ (1) | 2024.12.17 |
Nutri Capture ํ๋ก ํธ์๋ - item ์ถ๊ฐใ์ ๊ฑฐ ์ ๋๋ฉ์ด์ (0) | 2024.12.15 |
Nutri Capture ํ๋ก ํธ์๋ - INSERT ๋ฐ DELETE ๋ฒํผ ๊ตฌํ (1) | 2024.11.28 |