스크린 리더와 같은 접근성 서비스의 사용자는 콘텐츠 라벨을 사용하여 인터페이스 내 요소의 의미를 이해합니다.
정보가 요소 내에서 시각적으로 전달되는 등의 일부 경우, 콘텐츠 라벨은 해당 요소와 관련된 의미나 작업에 대한 텍스트 설명을 제공합니다.
사용자 인터페이스의 요소가 콘텐츠 라벨을 제공하지 않는다면 일부 사용자가 제시된 정보를 이해하거나 인터페이스에서 작업을 실행하기 어려울 수 있습니다.
구현
View인터페이스에 특정 유형의 Views
가 사용되면 해당 View
와 관련된 목적 또는 작업을 설명하는 콘텐츠 라벨을 제공해야 합니다.
콘텐츠 라벨 제공 방법
android:contentDescription
ImageView
, ImageButton
, CheckBox
또는 시각적으로 정보를 전달하는 다른 View
를 사용할 때 android:contentDescription
속성을 사용하여 해당 View
의 콘텐츠 라벨을 제공합니다.
콘텐츠 라벨은 런타임 시에만 사용할 수 있는 정보에 따라 다르기도 합니다. 또는 View
의 의미는 시간이 지남에 따라 달라질 수도 있습니다. 예를 들어 재생 버튼은 음악 재생 중 일시중지 버튼으로 바뀔 수 있습니다. 이 경우 View#setContentDescription(CharSequence contentDescription)
을 사용하여 적절한 시점에 콘텐츠 라벨을 업데이트하세요.
일반적으로 접근성 서비스가 ViewGroup
을 설명하면 하위 View
와 콘텐츠 라벨을 결합합니다. 이 동작을 재정의하고 해당 항목 및 포커스 가능하지 않은 하위 Views
의 설명을 제공하고 있음을 나타내려면 ViewGroup
에서 contentDescription
을 설정하세요. ViewGroup
에 설정할 때 contentDescription
내에 하위 Views
의 콘텐츠 라벨을 포함해야 할 수 있습니다.
android:hint
EditTexts
또는 수정 가능한 TextViews
의 경우 android:hint
속성을 사용하여 텍스트 입력란의 목적을 나타내세요. android:contentDescription
은 수정 가능한 Views
의 콘텐츠 라벨로 사용되어서는 안 됩니다.
android:labelFor
android:labelFor
속성을 사용하여 View
가 다른 View
의 콘텐츠 라벨로 동작해서는 안 됨을 나타내세요.
콘텐츠 라벨이 필요하지 않은 경우
다음과 같은 특정한 경우 콘텐츠 라벨이 제공되어서는 안 됩니다.
TextView
(또는 서브클래스)에 렌더링된 텍스트는 자동으로 접근성 서비스에 제공됩니다. 보통 추가 콘텐츠 라벨이 필요하지 않습니다.- 장식 이미지 또는 시각적으로 의미 있는 정보를 전달하지 않는 이미지에는 콘텐츠 라벨이 필요하지 않습니다. 이 경우
"@null"
의android:contentDescription
속성이나"no"
의android:importantForAccessibility
속성을 설정합니다.
자세히 알아보려면 Android 개발자 교육 및 API 가이드에서 콘텐츠 라벨 구현에 대해 읽어 보세요.
인터페이스에 특정 유형의 컴포저블이 사용되면 해당 컴포저블과 관련된 목적 또는 작업을 설명하는 콘텐츠 라벨을 포함해야 합니다.
콘텐츠 라벨 제공 방법
콘텐츠 설명
Image
, Icon
또는 그래픽 정보를 전달하는 다른 하위 수준 컴포저블에 대한 콘텐츠 라벨을 제공하려면 콘텐츠 설명을 설정하세요.
- 콘텐츠 라벨은 런타임 정보에 따라 달라질 수 있으며, 컴포저블의 의미가 바뀔 수 있습니다. 예를 들어 재생 버튼은 음악 재생 중에 일시중지 버튼으로 바뀔 수 있습니다.
- 이러한 경우 Compose가 콘텐츠 설명의 변경사항을 관찰하고 새로운 값으로 재구성할 수 있도록 상태를 사용하세요. 상태 및 Jetpack Compose를 사용하는 방법 알아보기
- 경우에 따라 하위 요소의 콘텐츠 라벨을 결합하는 포커스 가능한 단일 요소로 요소들을 병합할 수 있습니다. 요소를 병합하는 방법 알아보기
라벨 매개변수
TextField
와 같은 일부 컴포저블은 선택적 label
매개변수를 지원합니다. 라벨이 설정되면 요소가 label
에 전달된 컴포저블을 표시합니다. 접근성 서비스를 사용하여 컴포저블을 설명할 수 있습니다.
콘텐츠 라벨이 필요하지 않은 경우
다음과 같은 특정한 경우 콘텐츠 라벨이 추가되어서는 안 됩니다.
Text
에서 렌더링된 텍스트나Text
를 포함하는 기타 컴포저블에서 렌더링된 텍스트는 자동으로 접근성 서비스에 제공됩니다.- 장식 이미지 또는 시각적으로 의미 있는 정보를 전달하지 않는 이미지입니다.
- 이 경우
contentDescription
매개변수 또는Modifier.semantics#contentDescription
속성을null
로 설정하거나Modifier#clearAndSetSemantics
를 호출하세요.
- 이 경우
디자인
사용자 인터페이스를 디자인할 때 시각적으로 표시되는 콘텐츠가 접근성 서비스 사용자에게 어떻게 라벨링되어야 하는지 신중히 생각해 보세요. 콘텐츠 라벨은 다음 원칙을 따라야 합니다.
- 간단명료하며 요소와 관련된 의미 또는 작업을 명확히 설명합니다.
- 콘텐츠 라벨에 요소의 유형 또는 상태를 포함하지 않습니다.
- 작업과 관련된 요소의 경우 시각적 표현이 아닌 작업을 설명합니다.
- 요소와 구체적으로 어떻게 상호작용하는지 사용자에게 안내하지 않습니다.
자세히 알아보려면 Material Design 접근성 작성 가이드라인을 참고하세요.
테스트
앱의 사용자 인터페이스가 콘텐츠 라벨을 누락하지 않았는지 직접 확인하려면 다음 단계를 따르세요.
- Talkback을 사용 설정합니다.
- 앱을 엽니다.
- 선형 탐색 동작을 사용하여 접근성 포커스를 화면의 각 요소로 이동합니다.
- TalkBack이 일부 요소로 포커스를 이동하는데 해당 요소의 의미 있는 설명을 말하지 않거나 '라벨이 지정되지 않은' 메시지를 말하는 경우, 해당 요소의 콘텐츠 라벨이 누락된 것일 수 있습니다.
Android의 자동화된 테스트 도구는 누락된 콘텐츠 라벨을 감지할 수 있습니다. 기기에서 앱을 수동으로 테스트하려면 Android용 접근성 검사기 사용을 고려해 보세요. 자동 테스트를 이용하려면 Espresso 및 Robolectric에서 접근성 확인을 사용 설정하세요.