Navigate back to the homepage

Android Accessibility

Reno Kim
June 5th, 2020 · 1 min read

Android Accessibility

[우아한형제들 기술 블로그]

1. 대체 텍스트

  • contentDescription 은 눈으로 읽히는 모든 정보를 음성으로 읽어줄 수 있는 대체 텍스트를 표현 한다
  • Button 과 ClickListner 가 붙은 ImageView 에는 “ㅇㅇ 버튼” 이라고 읽어준다
1<!-- for example -->
2<ImageView
3 android:id="@+id/userPhotoImageView"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:contentDescription="@string/cd_profile_image_change"
7 android:src="@drawable/bg_user_thumbnail_pressed_selector" />

2. 상세히 설명하기

  • AccessibilityNodeInfoCompat (api level 22 부터 지원) 사용하기
  • hintScript 를 통해 원하는 내용을 변경
1fun setAccessibilityClickActionHintScript(
2 view: View,
3 hintScript: String?
4) {
5 if (isTalkbackOn) {
6 view.setAccessibilityDelegate(object : View.AccessibilityDelegate() {
7 override fun onInitializeAccessibilityNodeInfo(
8 host: View,
9 info: AccessibilityNodeInfo
10 ) {
11 super.onInitializeAccessibilityNodeInfo(host, info)
12 val infoCompat = AccessibilityNodeInfoCompat.wrap(info)
13 val clickAction = AccessibilityActionCompat(
14 AccessibilityNodeInfoCompat.ACTION_CLICK,
15 hintScript
16 )
17 infoCompat.addAction(clickAction)
18 }
19 })
20 }
21}
  • 특정값이 변경되었을때, 변경 여부를 유저에게 알려주려면 AccessibilityEvent 를 announce 로 설정한 후 전송
1fun sendAccessibilityEvent(text: String?) {
2 if (isTalkbackOn) {
3 val e = AccessibilityEvent.obtain()
4 e.eventType = AccessibilityEvent.TYPE_ANNOUNCEMENT
5 e.className = context.javaClass.getName()
6 e.packageName = context.packageName
7 e.text.add(text)
8 manager.sendAccessibilityEvent(e)
9 }
10}

More articles from Reno

HashMap vs HashTable

HashMap 과 HashTable 스터디하면서 정리한 글

February 27th, 2020 · 1 min read

WebViewClient SslError 관련 경고 대응했던 이야기

WebViewClient.onReceiveSslError() 사용시 주의할점

February 27th, 2020 · 1 min read
© 2019–2021 Reno
Link to $https://github.com/renovatio0424Link to $https://www.linkedin.com/in/정원-김-33b30415a