아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
데브투 favicon데브투

Compose로 접근성 높은 포커스 표시기 구현하기

by DD
2026-05-01
2개월 전
조회수 8

Compose를 사용하여 키보드 포커스 표시기를 구현하는 방법 소개

접근성 가이드라인(Accessibility Guidelines)에 따라 포커스 표시기의 가시성을 높이는 방법 제시

Indication API와 DrawModifierNode를 활용하여 사용자 정의 포커스 표시기 구현

터치 모드(Touch Mode)에서 포커스 표시기를 숨기는 방법 설명

접근성(Accessibility)을 고려한 포커스 표시기 설계

본문은 웹 접근성 가이드라인(Web Content Accessibility Guidelines, WCAG)의 SC 2.4.13 Focus Appearance를 준수하는 포커스 표시기 구현을 강조한다. 이는 키보드 및 키보드 에뮬레이션 기기 사용자가 UI를 쉽게 탐색하도록 돕기 위함이다.

최소 두께 2픽셀 이상, 3:1 이상의 명암비(Contrast Ratio)를 충족해야 함

Android 기본 Ripple 효과는 기술적으로는 통과되지만, 가시성 개선 필요

Indication API와 DrawModifierNode를 활용하여 사용자 정의 스타일 적용

Indication API를 활용한 포커스 표시기 구현

Compose에서 사용자 정의 포커스 표시기를 구현하기 위해 Indication API를 활용한다. 이 API는 DrawModifierNode를 통해 복잡한 시각 효과를 그릴 수 있도록 지원한다.

Modifier, IndicationNodeFactory, DrawModifierNode를 사용하여 표시기 구현

FocusNode 클래스에서 interactionSource를 통해 포커스 상태 감지

drawContent()를 호출 후, isFocused 상태에 따라 표시기 그림

이러한 방식을 통해, 컴포즈 코드에서 표시기 사용을 간소화한다.

Modifier를 활용한 컴포넌트 통합

포커스 표시기 구현을 위해 Modifier를 활용하여 컴포넌트의 재사용성을 높인다. 특히, Button, TextField와 같이 자체 interactionSource를 가진 컴포넌트의 경우, Modifier.focusIndication()을 통해 간단하게 적용할 수 있다.

MutableInteractionSource를 생성하여 컴포넌트의 interactionSource로 전달

사용자 정의 컴포넌트의 경우, toggleable, clickable과 같은 Modifier에 interactionSource를 전달

Ripple 효과와 같은 시각적 피드백을 함께 제공하여 사용자 경험 향상

터치 모드(Touch Mode)에서의 포커스 표시기 제어

터치 모드(Touch Mode) 환경에서 포커스 표시기의 가시성을 제어하여 사용자 경험을 개선한다. InputModeManager를 활용하여 현재 입력 모드를 감지하고, 키보드 입력 모드일 때만 포커스 표시기를 보이도록 설정한다.

CompositionLocalConsumerModifierNode 인터페이스 구현

LocalInputModeManager를 통해 현재 입력 모드 확인

InputMode.Keyboard일 경우에만 포커스 표시

이러한 방식으로, 불필요한 표시를 줄여 UI를 깔끔하게 유지한다.

More Accessible Focus Indicators with Compose
중급
기술
Compose
Frontend
원문 읽기
원문 읽기

관련 추천 글

Compose LazyList, stable 상태 관리가 성능을 좌우한다!

여기어때 로고

지도 통합, 비용 절감, 아키텍처 개선까지! 여기어때 개발팀의 기술 회고

여기어때 로고

글로벌웹툰, Large Screen에 맞춰 UI/UX 개선

네이버 D2 로고

뱅크샐러드 Android 팀의 모든 것!

뱅크샐러드 로고

Compose NestedScrollConnection으로 딜허브 UI를 구현하는 방법!

여기어때 로고

Jetpack Compose, 실전에서 생산성 혁신을 이끌다!

놀유니버스 로고
데브투 favicon데브투
중급
기술
Compose
Frontend

관련 추천 글

Compose LazyList, stable 상태 관리가 성능을 좌우한다!

여기어때 로고

지도 통합, 비용 절감, 아키텍처 개선까지! 여기어때 개발팀의 기술 회고

여기어때 로고

글로벌웹툰, Large Screen에 맞춰 UI/UX 개선

네이버 D2 로고

댓글 0

첫 번째 댓글을 남겨보세요!