支援鍵盤導覽功能

除了軟輸入法 (例如螢幕鍵盤) 外,Android 也支援連接裝置的實體鍵盤。鍵盤不僅提供便利的文字輸入模式,還能讓使用者瀏覽及與應用程式互動。雖然大多數手持裝置 (例如手機) 是主要的互動模式,但平板電腦和類似裝置經常受到使用,許多使用者也喜歡將鍵盤配件連接至手機。

越來越多的 Android 裝置提供這類體驗,因此請務必針對應用程式進行最佳化調整,讓使用者能夠使用鍵盤進行互動。本文件說明如何改善鍵盤導覽功能。

測試應用程式

使用者可能已使用鍵盤瀏覽應用程式,因為 Android 系統預設會啟用大部分的必要行為。

Android 架構提供的所有互動式小工具 (例如 ButtonEditText) 都可以聚焦。這表示使用者可以透過 D-Pad 或鍵盤等控制裝置進行瀏覽,且每個小工具會在獲得輸入焦點時,發出亮光或以其他方式變更外觀。

如要測試應用程式,請執行以下程序:

  1. 在提供硬體鍵盤的裝置上安裝應用程式。

    如果沒有有鍵盤的硬體裝置,請連接藍牙鍵盤或 USB 鍵盤。

    您也可以使用 Android 模擬器:

    1. 在 AVD Manager 中,按一下「New Device」,或選取現有的設定檔,然後按一下「Clone」
    2. 在顯示的視窗中,確認「鍵盤」和「DPad」已啟用。
  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 移動到螢幕上的外觀:從 button1editText1,然後再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"
    ...  />

其他資源

請參閱下列相關資源: