[Android] Talkback 대응하기 - XML편

3
post-thumbnail

최근에 접근성 관련 법률이 강화됨에 따라 접근성 대응을 필수적으로 해야하는 시대가 되었습니다.

특히 오늘은 접근성의 꽃인 TalkBack 대응에 알아보도록 하겠습니다.

기본적으로 ContentDescription을 넣는것은 제외하고 설명하겠습니다.

1. Focus Skip하기

단순 이미지는 Focus를 Skip하는게 좋을수도 있습니다.

android:importantForAccessibility="no" 를 이용해 Focus 스킵이 가능합니다.

예를들어 위와같은 레이아웃이 있을때, 왼쪽 이미지는 생략하고 글자로 바로 넘어가고 싶을때 사용하면 될것 같습니다.

2.Focus 합치기

Focus를 합치고자 한다면, 상위에 ViewGroup을 넣어 해결할 수 있습니다.

3. Focus 나누기

만약 ViewGroup 하위의 View에 개별적으로 Focus가 적용되고 싶다면 상위 ViewGroup에는 android:focusable="false" 를 주고, 하위 View에 android:focusable="true" 를 주도록 합시다.

4. Role 변경하기

해당 View는 TextView이지만, Talkback 모드에서 EditText처럼 읽어야 할수도 있습니다.

TextView를 EditText로 바꾸는 방법이 가장 좋지만, 여건상 안될때는 Role을 변경할 수도 있습니다.

5. Focus 상위로 가져가기

EditText가 중간에 포함되어있다면, EditText부터 Focus가 시작될수도 있습니다.

Focus를 상위로 바꾸고싶다면 android:focusableInTouchMode="true" 를 이용해보도록 합시다.

+추가) CompatImageView에서 문제가 발생할 수 있습니다.
제가 겪은 문제는 ImageView를 두번 클릭해야 ClickAction이 작동하는거였는데, 접근성을 끄고 동작을 확인해 보셔야 할것 같습니다.

6. ViewGroup에서 연결해서 읽기

ViewGroup에서 contentDescription 을 넣지 않는다면 내부의 레이아웃을 순차적으로 읽습니다.

예를 들어 위와 같이 레이아웃이 배치될 경우, “콩이의 이미지 뷰 , 콩이의 버튼 , 버튼 두번 누르면 활성화됩니다” 라고 발화됩니다.

7. 일회성 발화 만들기

Activity에 들어왔을때, Text는 없지만 해당 페이지를 설명하기위해 일회성으로 발화가 필요할수도 있습니다.

코드로 최상위 View(일반적으론 ConstraintLayout) 의 announceForAccesibility() 을 이용하면 됩니다.

8. Action 수정 하기

Button에 OnClickListener를 달았다면, “활성화 하려면 두번 탭하세요” 라는 Action이 들리게 됩니다.

사용자의 경험을 높이기 위해 “활성화” 를 구체적인 문장으로 변경시킬 수 있습니다.

예를들어 식료품을 구입할 수 있는 앱에서 구입이라는 버튼이 있을때 “구입하려면 두번 탭하세요” 가 발화되는게 좀더 자연스러울 것입니다.

9.CheckBox Focus 문제

ViewGroup으로 감쌌는데도 CheckBox에 Focus가 이동하는 경우가 있습니다.
내부적으로 clickListener가 장착되있는 녀석이기 때문에 벌어지는 현상입니다.
Clickable과 Focusable을 이용하면 CheckBox에 Focus가 가는것을 방지할 수 있습니다.

10. 선택됨, 선택함 동시 발화 문제

위와 같은 코드가 있다고 생각해봅시다.
ContstraintLayout의 isSelected를 이용해서 어떠한 작업을 한다고 했을떄(예를들어 @background에 selector를 넣었다고 생각해보자)
ContentDescription은 아래와 같이 읽어주게 됩니다.

"선택됨, 선택함, 체크박스"
이런식으로 읽혀지게 된다.
뿐만아니라 isSelected가 호출될때마다 계속 반복되서 발화됩니다.
이를 고치기 위해서는 isSelected를 사용하지 않으면 됩니다.

11. 토크백 감지

가끔 어떤 화면에는 토크백이 켜졌을때 다르게 행동해야하는 경우가 있습니다.
예를 들어 화면 시작시 중간에 있는 EditText에 Focus가 잡히는데, 토크백을 키면 상위 View부터 포커스가 시작되어야 하는 경우가 있죠.

그럴 때는 토크백을 감지해야합니다.

12. Android 9(28) 이하와 확연하게 달라졌으니 확인할 것

28이하에는 EditText가 있다면 바로 Focus가 된다던지, 화면 진입시 Focus가 없다던지
여러가지 차이점이 발생합니다.
그렇기에 직접 여러 핸드폰으로 확인을 해보셔야 합니다.


참고

ANDROID ACCESSIBILITY 더 잘 사용하기

Make apps more accessible  |  App quality  |  Android Developers

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글