키보드 탐색 지원하기

Android는 터치 키보드와 같은 소프트 입력 방법 외에도 기기에 연결된 물리적 키보드도 지원합니다. 키보드는 편리한 텍스트 입력 방법을 제공할 뿐 아니라 사용자가 앱을 탐색하고 상호작용할 수 있는 방법도 됩니다. 스마트폰과 같은 대부분의 핸드헬드 기기는 터치를 기본 상호작용 모드로 사용하지만, 태블릿 및 이와 유사한 기기의 인기가 높아지면서 많은 사용자가 키보드 액세서리를 연결하기를 좋아합니다.

이런 종류의 경험을 제공하는 Android 기기가 많아짐에 따라 키보드를 통한 상호작용을 지원하도록 앱을 최적화하는 것이 중요합니다. 이 과정에서는 키보드를 사용한 탐색을 더 효율적으로 지원할 수 있는 방법을 설명합니다.

참고: 애플리케이션에서 방향 탐색을 지원하는 것은 시각적 신호를 사용해 탐색하지 않는 사용자가 애플리케이션에 액세스할 수 있게 만들 때에도 중요합니다. 애플리케이션에서 방향 탐색을 완벽하게 지원하면 uiautomator 같은 도구를 사용하여 사용자 인터페이스 테스트를 자동화하는 데에도 도움이 됩니다.

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

앱 테스트하기

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

Android 프레임워크에서 제공되는 모든 대화형 위젯(예: ButtonEditText)에 포커스를 둘 수 있습니다. 따라서, 사용자는 D패드나 키보드 같은 컨트롤 기기를 사용해 탐색할 수 있으며 각 위젯은 입력 포커스를 받으면 발광하거나 모양이 바뀝니다.

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

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

    키보드가 있는 하드웨어 기기가 없는 경우에는 블루투스 키보드나 USB 키보드를 연결하세요(단, USB 액세서리를 지원하지 않는 기기도 있음).

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

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

    예상하지 않은 방식으로 포커스가 이동하는 경우가 있는지 확인합니다.

  3. 앱의 처음부터 테스트를 시작하고 앞 단계와 달리 방향 컨트롤(키보드의 화살표 키)을 사용하여 앱을 탐색합니다.

    UI의 각 포커스 요소에서 위쪽, 아래쪽, 왼쪽, 아래쪽 화살표를 누릅니다.

    예상하지 않은 방식으로 포커스가 이동하는 경우가 있는지 확인합니다.

Tab 키나 방향 컨트롤을 사용한 탐색이 예상대로 작동하지 않는 경우를 발견하는 경우 다음 섹션의 설명대로 포커스가 레이아웃에서 어느 위치로 이동해야 하는지 지정합니다.

탭 탐색 처리하기

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

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

    <RelativeLayout ...>
        <Button
            android:id="@+id/button1"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:nextFocusForward="@+id/editText1"
            ... />
        <Button
            android:id="@+id/button2"
            android:layout_below="@id/button1"
            android:nextFocusForward="@+id/button1"
            ... />
        <EditText
            android:id="@id/editText1"
            android:layout_alignBottom="@+id/button2"
            android:layout_toLeftOf="@id/button2"
            android:nextFocusForward="@+id/button2"
            ...  />
        ...
    </RelativeLayout>
    

이제 포커스는 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"
        ...  />