포커스 시각화를 위한 시각적 단서 제공
Material 테마의 포커스 가능 요소에는 이미 포커스 스타일이 있지만 배경화면이 테마와 일치하는 경우 시각적 요소를 추가하여 더 쉽게 찾을 수 있습니다. 좋은 해결책은 배경과 대비가 좋은 색상으로 요소를 추가하세요.
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
이 예에서는 remember
을 사용하여 테두리 색상을
리컴포지션되고 요소의 윤곽선은 요소의 윤곽선이
초점을 맞추거나 잃을 수 있습니다.
고급 시각 자료 구현
Jetpack Compose를 사용하면 더 정교하고 고급스러운 시각적 요소도 만들 수 있습니다. UI와 더 잘 어울리는 큐를 제공합니다.
- 먼저 UI에서 원하는 큐를 시각적으로 그리는
IndicationInstance
를 만듭니다.private class MyHighlightIndicationInstance(isEnabledState: State<Boolean>) : IndicationInstance { private val isEnabled by isEnabledState override fun ContentDrawScope.drawIndication() { drawContent() if (isEnabled) { drawRect(size = size, color = Color.White, alpha = 0.2f) } } }
- 다음으로,
Indication
를 만들고 포커스가 맞춰진 상태를 기억합니다.class MyHighlightIndication : Indication { @Composable override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance { val isFocusedState = interactionSource.collectIsFocusedAsState() return remember(interactionSource) { MyHighlightIndicationInstance(isEnabledState = isFocusedState) } } }
indication()
수정자를 통해Indication
와InteractionSource
를 모두 UI에 추가합니다.val highlightIndication = remember { MyHighlightIndication() } var interactionSource = remember { MutableInteractionSource() } Card( modifier = Modifier .clickable( interactionSource = interactionSource, indication = highlightIndication, enabled = true, onClick = { } ) ) {}
포커스 상태 이해하기
일반적으로 포커스 상태가 변경될 때마다 FocusEvent
가 실행됩니다.
트리를 구성하고 focusable()
수정자의 상위 요소는
onFocusChanged()
수정자
포커스의 상태를 알아야 하는 경우 이러한 API를 함께 사용하면 됩니다.
다음과 같이 onFocusChanged
수정자를 사용합니다.
- 수정자가 연결된 컴포저블이
isFocused
이면true
를 반환합니다. 집중 hasFocus
는isFocused
와 유사하게 작동하지만 상당한 차이가 있습니다. 현재 요소만 확인하는 것이 아니라 현재 요소 또는 요소의 하나가 집중력 있게isCaptured
는 포커스가 유지될 때마다true
를 반환합니다. 이는TextField
에 잘못된 데이터가 포함되어 있어 다른 요소는 포커스를 지우지 않습니다.
이러한 필드는 아래와 같습니다.
Modifier.onFocusChanged {
val isFocused = it.isFocused
val hasFocus = it.hasFocus
val isCaptured= it.isCaptured
}
추천 서비스
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- 포커스 동작 변경
- Compose의 Material Design 2
- 사용자 입력 처리