목록Android/Compose (15)
시배's Android
ViewCompositionStrategy Compose UI 뷰인 ComposeView 및 AbstractComposeView와 같은 Compose UI 뷰의 기본 구성을 관리하기 위한 전략입니다. AbstractComposeView.setViewCompositionStrategy를 참조하십시오. Compose 뷰는 지속적인 작업과 외부 이벤트 소스에 대한 구성 등록을 포함합니다. 이러한 등록은 호스트 뷰가 버려진 후에도 구성이 지속적으로 유지되어 가비지 컬렉션에 적합하지 않은 상태로 남을 수 있습니다. 이러한 리소스와 등록은 AbstractComposeView.disposeComposition을 호출하여 수동으로 언제든지 해제할 수 있으며, 필요할 때 자동으로 새로운 구성이 생성됩니다. ViewCom..
이 블로그 포스팅에서는 Coil을 이용하여 이미지를 로드하면서 배경색 추출을 위해 Palette를 조합하는 방법에 대해 알아보겠습니다. Coil은 이미지를 비트맵으로 쉽게 로드할 수 있도록 도와주며, Palette는 이미지에서 주요 색상 팔레트를 추출하는데 사용됩니다. object PaletteGenerator { suspend fun convertImageUrlToBitmap( imageUrl: String, context: Context ): Bitmap? { val loader = ImageLoader(context = context) val request = ImageRequest.Builder(context = context) .data(imageUrl) .allowHardware(false) ..
fun Modifier.topFadingEdge( lazyListState : LazyListState, length : Dp, edgeColor : Color? = null ) = composed( debugInspectorInfo { name = "length" value = length } ){ val color = edgeColor ?: MaterialTheme.colorScheme.surface drawWithContent { val topFadingEdgeStrength by derivedStateOf { lazyListState.layoutInfo.run { val firstItem = visibleItemsInfo.first() when { visibleItemsInfo.size in 0...

val context = LocalContext.current val activity = context as AppCompatActivity 일반적으로 compose에서 activity가 필요로 할 경우 위와 같은 코드를 통해 가져올 수 있습니다. 하지만 Hilt가 적용되어 있을 경우 이 부분에서는 크래시가 발생하였고 FragmentContextWrapper를 Activity로 변환할 수 없다는 내용이었습니다. FragmentContextWrapper 클래스는 ContextWrapper를 상속받고 있었고, HIlt 내부에서 사용하는 ViewComponentManager에서 관리되고 있었습니다. 해결 방법은 FragmentComponentManager 클래스의 findActivity 메서드를 이용하는 것입..

Layout Compose의 Layout은 레이아웃을 커스터마이징 하는 데 사용됩니다. Layout은 자체적인 측정 및 배치 로직을 가지며, 하위 요소들을 포함하여 화면에 표시할 위치와 크기를 결정합니다. 먼저, Layout 클래스를 상속하여 사용자 정의 레이아웃을 작성해보겠습니다. 다음은 커스텀 레이아웃을 구현하기 위한 기본적인 코드입니다. import androidx.compose.foundation.layout.Layout import androidx.compose.runtime.Composable import androidx.compose.ui.LayoutModifier import androidx.compose.ui.Modifier import androidx.compose.ui.geometry..

CollapsingToolbarLayout CollapsingToolbarLayout은 스크롤 동작에 따라 다양한 효과를 적용할 수 있습니다. 예를 들어 스크롤을 아래로 내릴 때 툴바가 축소되면 화면 상단에 고정되고 이미지가 페이드아웃되는 효과 등을 설정할 수 있습니다. 위 Gif처럼 Compose에서 구현을 하려면 TopAppBarDefaults에 정의되어 있는 ScrollBehavior와 LargeTopAppBar를 통해 구현할 수 있습니다. @OptIn(ExperimentalMaterial3Api::class) @Composable fun Test() { val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffol..

Recomposition Compose의 recomposition은 UI를 업데이트하기 위해 필요한 변경 작업을 식별하고 수행하는 과정을 의미합니다. Recomposition은 선언적인 방식으로 작성된 Composable 함수들이 동작하는 핵심 메커니즘 중 하나입니다. Compose에서는 UI를 구성하는 각각의 Composable 함수는 독립적인 단위로 작동합니다. Composable 함수는 입력된 상태(State)에 따라 UI를 그리고 업데이트하는 역할을 담당합니다. Composable 함수는 상태가 변경될 때마다 자동으로 호출되고, 변경된 부분만 다시 그리고 업데이트합니다. Recomposition은 Composable 함수가 동일한 입력에 대해 동일한 출력을 생성하는지 확인하기 위해 수행됩니다. C..