아티클

jetpack compose 접근성 구현 3부 요소 유형 및 상태정보

엔비전스 접근성 2023-08-25 04:20:41

안녕하세요, 엔비전스입니다. jetpack compose 접근성 API 관련해서 세 번째 아티클을 작성하게 되었습니다. 이번에는 지난 2부에 이어 요소 유형 및 상태정보 구현 시 참고사항과 다른 요소로 초점 보내기에 대해 함께 살펴보도록 합니다.

참고

  • Button, RadioButton, Checkbox, TabRow를 사용한 탭 위젯 등의 네이티브 요소들을 사용하는 경우에는 접근성과 관련해서 특별한 구현이 필요하지 않습니다. 아래에서 설명하는 것들은 이러한 네이티브 요소들을 사용하지 못할 때 대체 수단으로 사용할 수 있는 방법들을 기술하는 것임을 밝혀 둡니다.
  • 본 아티클에서는 주로 각 접근성 API에 대한 특징 위주로 설명하며 사용법 및 코드 예제는 중간 중간 링크되는 포럼 팁을 참고해 주시기 바랍니다.

요소 유형

  • 요소 유형은 semantics modifier 내의 role 속성을 사용할 수 있습니다.
  • 안드로이드 뷰 시스템과 달리 roleDescription 속성은 지원하지 않기 때문에 버튼, 라디오버튼, 스위치, 체크박스, 탭, 이미지만 사용이 가능합니다. 따라서 드롭다운메뉴와 같은 위젯을 구현할 때에는 onClickLabel 속성을 통하여 변경 과 같은 힌트 메시지를 주는 것이 좋습니다.
  • Button 롤의 경우 Text 컴포저블에는 적용을 해도 버튼이라고 읽어주지 않습니다. 그러나 Box, Row와 같은 요소에는 적용이 가능합니다.
  • 탭, 라디오버튼의 경우에는 탭이나 라디오버튼을 감싸는 그룹 컨테이너에 selectableGroup semantics 모디파이어를 주어서 TalkBack에서 몇 번째 중 볓 번째 관련 정보를 출력하도록 할 수 있습니다.
  • 스위치의 경우 롤을 적용하면 상태정보를 잘 제공한다 하더라도 디폴트로 꺼짐이라는 정보를 한 번 더 읽는 버그가 있어 구현 시 주의가 필요합니다.

상태정보

상태정보란 선택됨, 선택 안됨, 확장됨, 축소됨, 켜짐, 꺼짐과 같은 정보들을 말합니다.

  • 안드로이드 view 시스템과 같이 stateDescription 속성을 제공하므로 읽지 않음, 읽음과 같은 기본적으로 컨트롤 상태정보에 없는 문자를 추가할 수 있습니다.
  • 선택과 해제를 토글하는 상태정보는 toggleable 모디파이어를 사용합니다.
  • 탭, 라디오버튼과 같이 여러 요소 중 하나만 선택되는 경우에는 semantics 내의 selected 속성을 사용합니다.
  • 접힘, 펼쳐짐 확장 축소 상태정보를 제공할 때에는 안드로이드 뷰 시스템과 비슷하게 semantics 모디파이어 속성 중 expand, collapse action을 사용합니다.

다른 요소로 포커스 보내기

웹과 마찬가지로 젯팩 컴포즈에서는 접근성 초점을 별도로 핸들링할 수 있는 방법이 없습니다. 따라서 웹에서도 focus 함수를 사용하여 키보드 포커스 자체를 다른 요소로 보내듯이 젯팩 컴포즈에서도 키보드 포커스 자체를 보내는 방식으로 접근성을 대응해야 합니다. 따라서 웹에서도 초점을 받지 않는 요소로 포커스를 보낼 때에는 반드시 tabindex -1 속성을 사용해야 하는 것처럼 젯팩 컴포즈에서도 초점을 보내고자 하는 요소는 반드시 키보드 초점을 받을 수 있도록 해 주어야 합니다.

저희가 제작한 fun sendFocus(focusState: Boolean) 모디파이어를 사용하면 포커스를 보내는 대상을 쉽게 설정할 수 있으므로 관련 게시글을 참고하시기 바랍니다.

 

지금까지 저희가 연구한 젯팩 컴포즈에서의 요소 유형 및 상태정보, 그리고 초점 보내기와 관련하여 공유하였습니다. 다음에는 커스텀 액션을 포함한 여러 접근성 액션들에 대해 깊이 있게 살펴보도록 하겠습니다.      

댓글 0
댓글을 작성하려면 해주세요.