키보드 탐색 지원

Android는 터치 키보드와 같은 소프트 입력 방법 외에도 기기에 연결된 실제 키보드를 지원합니다. 키보드는 텍스트 입력을 위한 편리한 모드와 사용자가 앱을 탐색하고 상호작용할 수 있는 방법을 제공합니다. 휴대전화와 같은 대부분의 휴대기기는 터치를 기본 상호작용 모드로 사용하지만 태블릿 및 이와 유사한 기기가 널리 사용되고 있으며 많은 사용자는 키보드 액세서리를 기기에 연결하기를 좋아합니다.

이러한 종류의 환경을 제공하는 Android 지원 기기가 늘어남에 따라 키보드를 통한 상호작용을 지원하도록 앱을 최적화하는 것이 중요합니다. 이 문서에서는 키보드를 사용한 탐색을 개선하는 방법을 설명합니다.

앱 테스트

사용자가 이미 키보드를 사용하여 앱을 탐색할 수 있을 수도 있습니다. Android 시스템이 필요한 대부분의 동작을 기본적으로 지원하기 때문입니다.

Android 프레임워크에서 제공하는 모든 대화형 위젯(예: ButtonEditText)에는 포커스 가능합니다. 즉, 사용자가 D패드나 키보드와 같은 제어 기기를 사용하여 탐색할 수 있으며, 각 위젯이 입력 포커스를 받으면 발광하거나 다른 방식으로 모양이 변경됩니다.

앱을 테스트하려면 다음 절차를 따르세요.

  1. 하드웨어 키보드를 제공하는 기기에 앱을 설치합니다.

    키보드가 있는 하드웨어 기기가 없다면 블루투스 키보드나 USB 키보드를 연결하세요.

    다음과 같은 방법으로 Android 에뮬레이터를 사용할 수도 있습니다.

    1. AVD Manager에서 New Device를 클릭하거나 기존 프로필을 선택하고 Clone을 클릭합니다.
    2. 표시되는 창에서 KeyboardDPad가 사용 설정되었는지 확인합니다.
  2. 앱을 테스트하려면 Tab 키만 사용하여 UI를 탐색합니다. 각 UI 컨트롤이 예상대로 포커스를 받는지 확인합니다.

    포커스가 예기치 않은 방식으로 이동하는 경우를 찾아보세요.

  3. 앱을 처음부터 다시 시작하여 키보드의 화살표 키와 같은 방향 컨트롤을 사용하여 UI를 탐색합니다. UI의 포커스 가능한 각 요소에서 위쪽, 아래쪽, 왼쪽, 오른쪽을 누릅니다.

    포커스가 예기치 않은 방식으로 이동하는 경우를 찾아보세요.

Tab 키를 사용한 탐색이나 방향 제어가 예상대로 작동하지 않는 경우가 발생하면 다음 섹션에 설명된 대로 레이아웃에서 포커스가 있어야 하는 위치를 지정하세요.

탭 탐색 처리하기

사용자가 키보드 Tab 키를 사용하여 앱을 탐색할 때 시스템은 입력 포커스가 레이아웃에 나타나는 순서에 따라 요소 간에 입력 포커스를 전달합니다. 예를 들어 상대적 레이아웃을 사용하고 화면 요소의 순서가 파일에 있는 순서와 다르면 포커스 순서를 수동으로 지정해야 할 수 있습니다.

예를 들어 다음 레이아웃에서는 버튼 두 개가 오른쪽에 정렬되고 텍스트 필드가 두 번째 버튼의 왼쪽에 정렬됩니다. 첫 번째 버튼에서 텍스트 필드로, 그런 다음 두 번째 버튼으로 포커스를 전달하려면 레이아웃에서 android:nextFocusForward 속성을 사용하여 포커스 가능 요소 각각에 관한 포커스 순서를 명시적으로 정의해야 합니다.

<androidx.constraintlayout.widget.ConstraintLayout ...>
    <Button
        android:id="@+id/button1"
        android:nextFocusForward="@+id/editText1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        ... />
    <Button
        android:id="@+id/button2"
        android:nextFocusForward="@+id/button1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button1"
        ... />
    <EditText
        android:id="@id/editText1"
        android:nextFocusForward="@+id/button2"
        app:layout_constraintBottom_toBottomOf="@+id/button2"
        app:layout_constraintRight_toLeftOf="@id/button2
        ...  />
    ...
</androidx.constraintlayout.widget.ConstraintLayout>

이제 포커스가 button1에서 button2로 이동한 다음 editText1로 이동하는 대신 화면에 표시되는 모양에 따라 button1에서 editText1로 이동한 다음 button2로 적절하게 이동합니다.

방향 탐색 처리

사용자는 키보드의 화살표 키를 사용하여 앱을 탐색할 수도 있습니다. 화살표 키는 D패드 또는 트랙볼로 탐색할 때와 동일하게 동작합니다. 시스템은 화면에 표시되는 뷰의 레이아웃에 따라 특정 방향으로 포커스를 둘 뷰를 '최선의 추측'으로 제시합니다. 그러나 시스템이 틀리게 추측하는 경우도 있습니다.

지정된 방향으로 탐색할 때 시스템이 적절한 뷰로 포커스를 전달하지 않으면 다음 속성을 사용하여 포커스를 받아야 하는 뷰를 지정합니다.

각 속성은 뷰 ID에 지정된 대로 사용자가 그 방향으로 이동할 때 포커스를 받을 다음 뷰를 지정합니다. 예를 들면 다음과 같습니다.

<Button
    android:id="@+id/button1"
    android:nextFocusRight="@+id/button2"
    android:nextFocusDown="@+id/editText1"
    ... />
<Button
    android:id="@id/button2"
    android:nextFocusLeft="@id/button1"
    android:nextFocusDown="@id/editText1"
    ... />
<EditText
    android:id="@id/editText1"
    android:nextFocusUp="@id/button1"
    ...  />

추가 리소스

다음 관련 리소스를 참고하세요.