✅GIT - 코딩 컨벤션, 브랜치 컨벤션, 커밋 컨벤션 지정
✅스플래시와 네비게이션 구현
카카오뱅크 클론 코딩을 하기에 앞서 GIT 관련 컨벤션을 정하고 스플래시와 네비게이션을 구현하였습니다.
스플래시를 XML, Compose 두가지 방식으로 구현할 수 있으나, 스터디를 컴포즈를 이용해 진행했으므로 컴포즈 형태로 구현했습니다.
스플래시
//SplashScreen.kt
@Composable
fun SplashScreen(navController: NavController, modifier: Modifier = Modifier) {
LaunchedEffect(Unit) {
//2.5초간 화면 정지 후 main 경로로 이동
delay(2500)
navController.navigate("main") {
//splash 경로를 네비게이션 백스택에서 제거하여 다시 돌아오지 않도록 함
popUpTo("splash") {
//화면 자체를 백 스택에서 제거
inclusive = true
}
//동일한 화면이 여러번 생성되지 않도록 함
launchSingleTop = true
}
}
Box(
modifier = Modifier
.fillMaxSize()
.background(color = MainYellow)
.padding(16.dp),
contentAlignment = Alignment.TopCenter
) {
Column (
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.padding(top = 100.dp)
){
Image(
painter = painterResource(id = R.drawable.symbol_kakaobank),
contentDescription = "카카오뱅크 로고",
modifier = Modifier.size(75.dp)
)
Spacer(modifier = Modifier.height(16.dp))
}
}
}
구체적인 설명은 주석을 참고해주세요!
카카오뱅크의 symbol 이미지를 res -> drawable 파일 안에 png 형태로 저장한 뒤, 해당 이미지를 SplashScreen.kt에서 불러옵니다.
*XML 방식으로도 구현해보았습니다. 진행 과정에는 문제가 없지만, 이미지 오류가 발생합니다.
//res -> values -> themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.KakaoBank" parent="android:Theme.Material.Light.NoActionBar" />
<style name="Theme.KakaoBank.SplashScreen" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">#fffae100</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/symbol_kakaobank</item>
<item name="postSplashScreenTheme">@style/Theme.KakaoBank</item>
</style>
</resources>
//res -> drawable -> symbol_kakaobank.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="150dp" android:viewportHeight="2000" android:viewportWidth="1600" android:width="120dp">
<path android:fillColor="#1e1e1e" android:pathData="M1354.7,1000c148.9,-98.4 246.8,-267.4 245.3,-459.5C1597.9,238.9 1344.2,0 1042.6,0H60C26.8,0 0,26.8 0,60v1880c0,33.2 26.8,60 60,60h982.6c301,0 555.3,-238.9 557.4,-540.5 1.6,-192.1 -96.3,-361.6 -245.3,-459.5ZM868.4,1480h-220v-960h220v960Z" android:strokeWidth="0" android:scaleType="fitCenter"/>
</vector>
//build.gradle dependency
// Splash API
implementation("androidx.core:core-splashscreen:1.0.0")
//AndroidManifest.xml
android:theme="@style/Theme.KakaoBank.SplashScreen">
새롭게 알게 된 내용
📍Splash 가 가장 첫 화면으로 지정되는 이유
NavHost(
navController = navController,
startDestination = "splash" // 첫 화면으로 "splash"를 지정
) {
composable("splash") { SplashScreen(navController = authNavigator.navController) }
}
KakaoNavHost.kt에서 splash를 가장 첫 화면으로 지정 중
"splash" 경로와 연결된 컴포저블이 SplashScreen 함수로 설정됨
📍스플래시에서 메인 페이지로 리다이렉트 되는 과정
LaunchedEffect(Unit) {
delay(2500)
navController.navigate("main") {
popUpTo("splash") {
inclusive = true
}
launchSingleTop = true
}
}
딜레이 이후 main 페이지로 이동
스플래시 또한 하나의 페이지이므로 네비게이션에서 '뒤로 가기' 버튼을 눌렀을 때 해당 페이지로 이동 가능
따라서 백스택에서 스플래시 제거 해줘야 함
'Group Study (2024-2025 Q1) > Android' 카테고리의 다른 글
[Android] 카카오뱅크 클론 코딩 (3) (1) | 2024.11.29 |
---|---|
[Android] 카카오뱅크 클론 코딩 (2) (0) | 2024.11.27 |
[Android] 스타일 가이드와 디자인 패턴 (3) | 2024.11.13 |
[Android] Preferences Datastore, Room을 활용한 로컬 데이터 저장 (3) | 2024.11.03 |
[Android] Retrofit2를 활용한 서버통신 (2) | 2024.10.29 |