CategoryJetpack Compose

Jetpack Compose | ModalBottomSheet(M3)

J

최근 M3에서 제공되는 ModalBottomSheet를 이용하게 되었는데, BottomSheet뒤에 있는 뷰가 터치되지 않는 문제가 있었다. 어떤 식으로든 BottomSheet의 컨텐츠가 보이지 않을 때는 이를 보이지 않게 해야겠다는 생각이 들었다. BottomSheetState의 targetValue와 currentValue 변수 상태에 따라서 ModalBottomSheet 컴포저블 함수를 보이지 않게 하여 문제를 해결할 수 있었으나, 애니메이션과 시간 차가 있어서 그런지 BottomSheetLayout이 열고 닫히는데 부자연스러운 점이 있었다. 그래서 ModalBottomSheet의 표시 여부를 나타내는 Boolean 타입의 State를 만들고 이를 LaunchedEffect 를 이용해서 상태에 따라...

Jetpack Compose | Composable 함수에서의 ViewModel 사용

J

implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1 Jetpack Compose의 Composable 함수에서 viewModel() 함수로 뷰 모델에 액세스 하기 위해 앱 단위 build.gradle 에 다음 라이브러리를 추가한다. @Composable fun Test(testViewModel: TestViewModel = viewModel()) { Text(text = testViewModel.str) } 라이브러리 추가 이후 Jetpack Compose로 UI를 구성하는 과정에서 다음과 같이 ViewModel을 참조할 수 있다. 그러나 매개 변수로 전달된 View Model을 하위 Composable 함수에 전달 해서는 안 된다...

Jetpack Compose | 밀어서 삭제 (SwipeToDismiss) 구현

J

SwipeToDismiss(밀어서 삭제) 방식은 리스트에서 아이템을 삭제하거나, 좋아요나 플레이리스트 등 특정 그룹에 추가하는 기능을 구현할 때 용이하다. Material 라이브러리에서는 이를 쉽게 제작할 수 있도록 SwipeToDismiss 라는 Composable 함수를 지원한다. 작성 방법이 쉽기 때문에 금방 따라 작성할 수 있다. val dismissState = rememberDismissState(confirmStateChange = { if (it == DismissValue.DismissedToStart) { /** * Dismiss 되었을 때 작업할 코드 작성 */ } true }) SwipeToDismiss(state = dismissState, directions = setOf(...

Jetpack Compose | Compose를 이용하는 BaseFragment

J

Compose 도입 이전에도 Activity 와 Fragment, ViewModel 등 공동으로 적용되어야 하는 부분에 대해서 Base 클래스를 만들어왔다. 무엇보다도 Compose를 이용하여 UI를 구성 할 때, Theme를 일괄적으로 적용하기 위한 작업이 필요했다. Compose로 구성되는 Fragment의 BaseFragment 부모 클래스를 다음과 같이 작성해보았다. 기존 BaseFragment가 있기 때문에 이름은 ComposeBaseFragment 정도로 명명했다. abstract class ComposeBaseFragment<R : BaseViewModel> : Fragment() { abstract val viewModel: R @Composable abstract fun...

Jetpack Compose | CoordinatorLayout 내 ComposeView 스크롤 문제

J

<androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" app:elevation="0dp" /> <androidx...

Your sidebar area is currently empty. Hurry up and add some widgets.