Android
08
jimmyyy
2025. 5. 26. 21:17
< Navigation >
- 전통적인 Android 앱은 여러 Activity를 전환 → 코드 복잡
- Jetpack Navigation Architecture Component는 이를 구성요소로 단순화
- NavHostController : 내비게이션 상태 및 스택 관리
- NavHost : 목적지들을 정의하는 컨테이너
< 목적지 그래프 설정 >
- 목적지는 composable()로 정의
- startDestination은 초기 화면 지정
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "home") {
composable("home") { HomeScreen() }
composable("customers") { CustomersScreen() }
composable("purchases") { PurchasesScreen() }
}
- sealed class + NavHost : 목적지 설정
< Sealed Class >
- 경로 관리 클래스
- 경로 오타 방지 및 재사용성 향상
- 경로 비교 시 안전성 확보
sealed class Routes(val route: String) {
object Home : Routes("home")
object Customers : Routes("customers")
object Purchases : Routes("purchases")
}
< 이동 >
- navigate() : 특정 경로로 이동하는 함수
- navController.navigate(route) : 화면 이동
- 이동 시 옵션
- popUpTo(): 백스택 제어, 이전 목적지 제거
- inclusive: 해당 목적지도 제거 여부
- launchSingleTop: 동일 목적지 중복 방지
- restoreState: 저장된 상태 복구
< 인수 전달 >
- 경로에 값 포함 + backStackEntry에서 추출
- 인수 전달 : navController.navigate("welcome/$userName")
- 인수 수신 : backStackEntry.arguments?.getString("userName")
- 경로 설정 : "welcome/{userName}"
< 하단 내비게이션 바 >
- Scaffold : 상단바, 하단바, 본문 영역 제공
- NavHost : 목적지 라우팅 처리
- BottomNavigation : 하단 탭 UI
- BottomNavigationItem : 하단 아이템 반복 생성
- currentBackStackEntryAsState() : 현재 선택된 탭 식별
- popUpTo() + launchSingleTop : 중복 스택 방지 및 상태 복원
< 제스처 >
- 터치, 드래그, 스와이프, 확대, 축소 등
- Modifier.clickable : 클릭 감지
- detectTapGestures() : 다양한 단일 제스처 e.g. 탭, 롱프레스, 더블
- Modifier.draggable : 수평 드래그, 드래그 방향은 Orientation.Horizontal 또는 Vertical
- detectDragGestures : 수평+수직 드래그, 자유 방향 드래그, 두 방향(offset.x, offset.y) 모두 추적
- Modifier.scrollable : 단일 방향 스크롤, offset 값을 갱신해 컴포넌트 위치 변경 가능
- verticalScroll + horizontalScroll : 이중 스크롤, Image, Canvas, Box 등에서 사용, 이중 축 방향 스크롤 구현 가능
- transformable : 확대/축소, scaleChange 값으로 크기 조절
- 회전 : rotationZ에 따라 요소 회전
- 하나의 Box에 모든 트랜스폼 제스처 통합
- 멀티터치 기반의 인터랙션을 완전하게 구현 가능
.graphicsLayer(
scaleX = scale,
scaleY = scale,
rotationZ = angle,
translationX = offset.x,
translationY = offset.y
)
< 스와이프 제스처 >
- 화면에 수평 또는 수직 방향으로 터치 후 이동하는 동작
- 주로 컴포넌트 간 상태 전환에 사용
- swipeable() 모디파이어
- rememberSwipeableState() : 스와이프 상태 보관
- anchors : 스와이프 가능한 위치와 그에 대응하는 상태를 매핑하는 설정
- thresholds : 임계점, 스와이프 전환 시점 기준 설정
- offset : 현재 스와이프 위치를 이용해 UI 위치 변경
- Orientation.Horizontal / Vertical : 이동 방향
- velocityThreshold : 상태 전환을 위한 최소 속도
- resistance : 사용자가 swipeable 범위를 넘어서 드래그 시 저항 효과 설정