支援鍵盤導覽功能

試試 Compose
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中使用觸控和輸入功能。

除了螢幕小鍵盤等軟體輸入法,Android 也支援連接裝置的實體鍵盤。鍵盤提供方便的文字輸入模式,使用者也能透過鍵盤瀏覽應用程式並與之互動。雖然手機等大多數手持式裝置都以觸控做為主要互動模式,但平板電腦和類似裝置也很受歡迎,許多使用者喜歡在這些裝置上加裝鍵盤配件。

越來越多 Android 裝置提供這類體驗,因此請務必最佳化應用程式,支援透過鍵盤互動。這份文件說明如何使用鍵盤改善瀏覽體驗。

測試應用程式

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

Android 架構提供的所有互動式小工具 (例如 ButtonEditText) 都是可聚焦的小工具。也就是說,使用者可以透過 D-Pad 或鍵盤等控制裝置操作,且每個小工具在取得輸入焦點時,都會發光或以其他方式改變外觀。

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

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

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

    您也可以使用 Android 模擬器:

    1. 在 AVD Manager 中,按一下「New Device」,或選取現有設定檔並按一下「Clone」
    2. 在顯示的視窗中,確認「鍵盤」和「方向鍵」已啟用。
  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 移至 editText1,再移至 button2,而不是從 button1 移至 button2,再移至 editText1

處理方向導覽

使用者也可以使用鍵盤上的方向鍵瀏覽應用程式,這與使用 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"
    ...  />

其他資源

請參閱下列相關資源: