목록Jetpack compose (5)
안드로이드 개발일기
컴포즈에서 navigation은 아직 낯선 점이 많은 것 같습니다. 저는 프로젝트 구현시 아래의 방법으로 진행하고 있습니다. 1. 화면들을 관리하는 sealed class Screen sealed class Screen( val route: String, val navArguments: List = emptyList() ) { object Home : Screen("home") object Detail : Screen( route = "detail/{${NavigationConstants.CUSTOM_DATA}}", navArguments = listOf( navArgument(NavigationConstants.CUSTOM_DATA) { type = CustomDataNavType() } ) ) { f..

갤러리에 접근하여 이미지를 얻기 위해 permission을 얻고 이미지를 가져오는 방법을 설명합니다. 1. build.gradle, manifest 추가 implementation 'com.google.accompanist:accompanist-permissions:0.31.5-beta' build.gradle에 accompanist의 라이브러리를 추가합니다. 갤러리 접근을 위한 permission을 manifest에 등록합니다. 안드로이드 13부터 갤러리 접근 권한에 변경이 있습니다. manifest에 관련 권한들을 선언해주고, View에서 Build API를 보고 분기처리를 할 예정입니다. 2. 요청할 permission과 launcher 선언 val launcher = rememberLaunche..

Jetpack Compose에서 이벤트 발생(이미지 클릭) 시 BottomSheet를 띄우고 없애는 코드를 알아보겠습니다. 1. BottomSheetScaffoldState 선언 val bottomSheetScaffoldState = rememberBottomSheetScaffoldState( bottomSheetState = rememberStandardBottomSheetState( initialValue = SheetValue.Hidden, skipHiddenState = false ) ) bottomSheetScaffold의 상태를 저장하는 컴포저블입니다. initialValue를 통해 바텀시트의 최초 상태값을 설정해줄 수 있습니다 SheetValue.Hidden: 완전히 가린 상태 Expande..

현재 Jetpack compose 1.4.5의 RangeSlider는 SliderColor로 색깔을 받고 있으며, TrackColor는 Color로 선언하게끔 되어 있습니다. Gradient를 주기 위한 방법은 Modifier.background에 brush를 주는 방법과 drawRect의 brush를 이용할 수 있습니다. RangeSlider 내부 코드를 뜯어보면 RangeSliderImpl에서 Box로 Track과 SliderThumb를 그리고 있습니다. 여기서 Track으로 들어가면 Canvas에서 drawLine으로 구현하고 있음을 알 수 있습니다. 위에서 설명한 gradient를 주는 두 가지 방법 중 첫 번째는 modifier.background로 주기에는 track의 사이즈가 아닌 전체 캔버..

Box { Image( painter = rememberAsyncImagePainter(model = R.drawable.cloud, imageLoader), contentDescription = "background_image", contentScale = ContentScale.Crop, modifier = Modifier.fillMaxSize() ) Scaffold( modifier = Modifier .fillMaxSize(), }, containerColor = Color.Transparent ) { innerPadding -> LazyColumn( state = listState, modifier = Modifier .fillMaxSize() ) { stickyHeader(key = "Cust..