노블의 개발이야기

[Android] Android O - Input and Navigation (Keyboard Navigation) 본문

Android

[Android] Android O - Input and Navigation (Keyboard Navigation)

더플러스 2017. 8. 16. 17:43

Input and Navigation (입력과 탐색)

Supporting Keyboard Navigation

  • Soft 입력 방법 (예: on-screen keyboards) 외에도 Android는 기기에 연결된 실제 키보드를 지원합니다.
  • 키보드는 텍스트 입력에 편리한 모드를 제공할 뿐 아니라 사용자가 앱을 탐색하고 상호작용할 수 있는 방법을 제공합니다.
  • 휴대 전화와 같은 대부분의 휴대 기기는 터치를 기본 상호작용 모드로 사용하지만 태블릿 및 유사한 기기가 인기를 얻고 있으며 많은 사용자가 키보드 액세서리를 부착하고 싶어합니다.

Test Your App

  • 안드로이드 시스템은 기본적으로 필요한 대부분의 동작을 활성화하므로 사용자가 키보드를 사용하여 앱을 탐색할 수 있습니다.
  • 안드로이드 프레임워크에서 제공하는 모든 대화식 위젯에는 포커스가 가능합니다.
  • 즉, 사용자가 D-pad 또는 키보드와 같은 제어 장치로 탐색할 수 있으며 각 위젯은 입력 포커스를 얻을 때 모양이 바뀝니다.

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

  1. 하드웨어 키보드를 제공하는 기기에 앱을 설치하십시오.
    • 키보드가 있는 하드웨어 장치가 없는 경우 블루투스 키보드 또는 USB 키보드를 연결하십시요.
    • Android 에뮬레이터를 사용할 수 도 있습니다.
      1. AVD Manager에서 새 장치를 클릭하거나 기좀 프로파일을 선택하고 복제를 클릭합니다.
      2. 창이 나타나면 키보드와 DPad가 활성화되어 있는지 확인합니다.
  2. 앱을 테스트하려면 Tab 키만 사용하여 UI를 탐색하여 각 UI 컨트롤이 예상대로 포커스를 맞출 수 있도록합니다.
  3. 앱의 시작 부분부터 시작하여 키보드의 방향키를 사용하여 앱을 탐색합니다.

Handle Tab Navigation

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

아래와 같이 nextFocusForward 속성을 사용하여 각 포커스 가능 element에 대한 포커스 순서를 명시적으로 정의할 수 있습니다.

<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>

Handle Directional Navigation

사용자는 키보드의 화살표 키를 사용하여 앱을 탐색할 수도 있습니다. 시스템은 뷰 레이아웃을 기반으로 특정 뷰에서 어떤 방향으로 포커스가 주어져야 하는지에 대한 최상의 추측을 합니다. 그러나 때로는 시스템이 잘못되었을 수도 있습니다.

아래와 같이 nextFocusUp/Down/Left/Right 속성을 사용하여 지정된 방향으로 이동할 때 명시적으로 정의할 수 있습니다.

<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"
    ...  />

Android O 변경사항

  • View 객체에 대한 포커스 상태 색상을 정의(포그라운드 또는 백그라운드 Drawable)하지 않은 경우, 프레임워크는 뷰의 기본 포커스 하이라이트 색상을 설정합니다. 이 포커스 하이라이트는 액티비티 테마를 기반으로 하는 ripple(물결모양?) drawable입니다.

  • View 객체가 포커스를 받을 때 기본 하이라이트를 사용하지 않도록 하려면, View 가 포함된 레이아웃 XML 파일에서 android:defaultFocusHightlightEnabled 특성을 false로 하거나 setDefaultFocusHightlightEnabled() 메소드로 설정합니다.

  • 키보드 입력이 UI 요소 포커스에 어떤 영향을 미치는지 테스트 하려면 개발자 옵션에서 Drawing > Show layout bounds 를 설정하면 됩니다. Android O에서 이 옵션은 포커스가 있는 현재 요소 위에 "X" 아이콘을 표시합니다.



'Android' 카테고리의 다른 글

[Android] Android O - WebView Security  (431) 2017.08.17
[Android] Android O - Autofill Framework  (0) 2017.08.17
[Android] AccountManager class  (0) 2017.08.11
[Android] Android O - Collection handling  (0) 2017.08.11
[Android] UncaughtExceptionHandler  (0) 2017.08.10
Comments