キーボード ナビゲーションをサポートする

画面上などのソフト入力方法に加えて、 キーボード - Android は、デバイスに接続された物理キーボードをサポートしています。 キーボードでは、テキスト入力に便利なモードに加え、ユーザーが アプリの操作や操作を行えますモバイル デバイスなど、ほとんどのハンドヘルド デバイスは スマートフォンはタップを主なインタラクション モードにしており、タブレットなどはタップを使用しています。 多くのユーザーは、キーボード アクセサリを できます。

このような機能を備えた Android デバイスが増えるにつれ、 キーボードによる操作をサポートするようにアプリを最適化しますこの このドキュメントでは、キーボードによるナビゲーションを改善する方法を説明しています。

<ph type="x-smartling-placeholder">

アプリをテストする

すでにキーボードでアプリを操作できることがあります。これは、 Android システムは、必要な動作のほとんどをデフォルトで有効にします。

Android フレームワークで提供されるすべてのインタラクティブ ウィジェット ButtonEditText - 焦点を絞ることができますつまり、ユーザーは D-pad や ウィジェットが点灯したり、表示が変わったりする場合などに、 入力フォーカスを取得します。

アプリをテストするには、次の手順を行います。

  1. ハードウェア キーボードを備えたデバイスにアプリをインストールします。

    キーボードを備えたハードウェア デバイスをお持ちでない場合は、Bluetooth で接続してください キーボードまたは USB キーボードを使用できます。

    Android Emulator も使用できます。

    1. AVD Manager で、[New Device] をクリックするか、デバイスを選択します。 [Clone] をクリックします。
    2. 表示されるウィンドウで、キーボードDPad が 有効にします。
  2. アプリをテストするには、Tab キーのみを使用してアプリを UI です。各 UI コントロールが想定どおりにフォーカスされることを確認してください。

    予期しないタイミングでフォーカスが移動するインスタンスを探します。 できます。

  3. アプリの最初からやり直して UI を操作する キーボードの矢印キーなどの方向コントロールを使って各 フォーカス可能な要素の場合は、です。

    予期しないタイミングでフォーカスが移動するインスタンスを探します。 できます。

Tab キーで移動した場合、 方向のコントロールが期待どおりに動作しない場合は、フォーカスする必要がある場所を レイアウトに配置する必要があります。

タブ ナビゲーションの処理

ユーザーがキーボードの Tab キーを使用してアプリを操作すると、 入力フォーカスは、その順序に基づいて要素間で渡されます。 表示されます。たとえば相対レイアウトを使用し、 画面上の要素の順序がファイル内の要素の順序と異なる場合、 フォーカス順序を手動で指定しなければならない場合があります。

たとえば、次のレイアウトでは、2 つのボタンが右側に配置されています。 2 つ目のボタンの左にテキスト フィールドが配置されます。合格 最初のボタンからテキスト フィールドに移動し、 各フォーカス可能な要素のフォーカス順序を明示的に定義する必要が 各要素を 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-pad またはトラックボールで移動する場合と同じように動作します。システム 「最も適切な推測」を提示する特定の方向にフォーカスを当てるビュー 基づいて決定します。しかし 場合によってはシステムが 間違いです。

ビュー内の移動時にシステムが適切なビューにフォーカスを渡さない場合、 フォーカスを受け取るビューを指定するには、 属性:

各属性で、ユーザーが次のタイミングでフォーカスを受け取るビューを指定します。 ビュー 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"
    ...  />
<ph type="x-smartling-placeholder">

参考情報

以下の関連リソースもご覧ください。