본문 바로가기

안드로이드

Android - Compose 1.2 바뀐 것

반응형

1. Chip과 FilterChip

드디어 기존의 Chip에 대응하는 컴포넌트가 Compose에 추가되었다.

@ExperimentalMaterialApi
@Composable
fun Chip(
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    shape: Shape = MaterialTheme.shapes.small.copy(CornerSize(percent = 50)),
    border: BorderStroke? = null,
    colors: ChipColors = ChipDefaults.chipColors(),
    leadingIcon: @Composable (() -> Unit)? = null,
    content: @Composable RowScope.() -> Unit
)
@ExperimentalMaterialApi
@Composable
fun FilterChip(
    selected: Boolean,
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    shape: Shape = MaterialTheme.shapes.small.copy(CornerSize(percent = 50)),
    border: BorderStroke? = null,
    colors: SelectableChipColors = ChipDefaults.filterChipColors(),
    leadingIcon: @Composable (() -> Unit)? = null,
    selectedIcon: @Composable (() -> Unit)? = null,
    trailingIcon: @Composable (() -> Unit)? = null,
    content: @Composable RowScope.() -> Unit
)

2. ModalBottomSheet의 skipHalfExpanded

ModalBottomSheet 에서 HalfExpanded 상태를 무시하기 위해선 아래와 같은 코드를 작성해야 했다.

rememberModalBottomSheetState(
    initialValue = ModalBottomSheetValue.Hidden,
    confirmStateChange = { it != ModalBottomSheetValue.HalfExpanded }
)

1.2 버전에서는 이를 flag 값으로 제공하여 skipHalfExpanded 를 true로 설정하면 HalfExpanded 상태를 무시하도록 설정할 수 있다.

val state = rememberModalBottomSheetState(
    initialValue = ModalBottomSheetValue.Hidden,
    skipHalfExpanded = true
)

3. LazyList의 contentType

contentType 을 지정할 수 있도록 제공하여 LazyList 의 아이템으로 타 양한 타입이 존재하는 경우 각각의 타입을 지정할 수 있다.

LazyColumn(modifier = Modifier) {
    items(list, key = { it.id }, contentType = { it.type }) {
        when (it.type) {
            Type.SmallText -> SmallText(it.text)
            Type.BigText -> BigText()
        }
    }
}

A 타입과 B 타입의 Content 가 존재할 때
기존에는 A를 B로 재구성하거나 B를 A로 재구성하도록 되어 재구성에 더 많은 비용을 사용했다.

 

contentType 를 지정하면 같은 타입끼리만 재구성을 진행하여 레이아웃 성능을 최적화할 수 있다.

4. LazyList의 userScrollEnabled

1.2 버전부터 사용자의 스크롤을 막기 위해 LazyListuserScrollEnabled flag 가 추가되었다.

true로 설정하면 앱에서 직접 실행하는 스크롤 이벤트 외에는 스크롤이 동작하지 않는다.

LazyColumn(modifier = Modifier, userScrollEnabled = false) {
    ...
}

5. Ease

기존에 제공하던 Easing 외 에도 더 많은 Ease 옵션이 추가되었다.

6. includeFontPadding

Text 컴포넌트의 includeFontPadding를 설정할 수 있는 방법이 추가되었고, 동시에 deprecated 되었다.

아직 includeFontPadding 의 default 값은 true이고 추후에 false로 변경할 예정이라고 한다.

val textStyle = TextStyle(
   platformStyle = PlatformTextStyle(includeFontPadding = false)
)

TextStyle 에서 지정할 수 있고, 아래처럼 잘 동작한다.

 

이전 버전에서 이걸 해결하려고 커스텀했었는데, 필요 없어졌다.

 

GitHub - D000L/compose-excludefontpadding

Contribute to D000L/compose-excludefontpadding development by creating an account on GitHub.

github.com

7. movableContentOf

Content를 재구성 없이 이동시킬 수 있도록 지원하는 함수가 추가되었다.

 

Android - MovableContentOf in Compose

최근 Stable로 올라온 Compose 1.2 버전에서 movableContentOf 와 movableContentWithReceiverOf 라는 새로운 두 함수가 추가되었다. 기존에는 동일한 Content이라도 부모가 바뀌게 되면 기존의 Content 없애고 새..

two22.tistory.com

8. 개발자 옵션의 애니메이션 속도 적용

개발자 옵션에서 애니메이션 속도를 조절하면 컴포즈에도 적용이 되도록 변경되었다.

반응형