Hỗ trợ điều hướng bằng bàn phím

Thử cách Compose
Jetpack Compose là bộ công cụ giao diện người dùng được đề xuất cho Android. Tìm hiểu cách sử dụng thao tác chạm và nhập trong Compose.

Ngoài các phương thức nhập mềm (chẳng hạn như bàn phím ảo), Android còn hỗ trợ bàn phím thực được gắn vào thiết bị. Bàn phím là một chế độ thuận tiện để nhập văn bản và là cách để người dùng điều hướng và tương tác với ứng dụng của bạn. Mặc dù hầu hết các thiết bị cầm tay như điện thoại đều sử dụng thao tác chạm làm chế độ tương tác chính, nhưng máy tính bảng và các thiết bị tương tự cũng rất phổ biến và nhiều người dùng thích gắn phụ kiện bàn phím vào các thiết bị này.

Khi ngày càng có nhiều thiết bị chạy Android mang đến trải nghiệm này, bạn cần tối ưu hoá ứng dụng để hỗ trợ hoạt động tương tác thông qua bàn phím. Tài liệu này mô tả cách bạn có thể cải thiện khả năng điều hướng bằng bàn phím.

Kiểm thử ứng dụng

Người dùng có thể đã điều hướng được trong ứng dụng của bạn bằng bàn phím, vì hệ thống Android cho phép hầu hết các hành vi cần thiết theo mặc định.

Tất cả các tiện ích có tính tương tác do khung Android cung cấp (chẳng hạn như ButtonEditText) đều có thể lấy tiêu điểm. Điều này có nghĩa là người dùng có thể điều hướng bằng các thiết bị điều khiển như D-pad hoặc bàn phím, đồng thời mỗi tiện ích sẽ phát sáng hoặc thay đổi giao diện khi nhận được tiêu điểm đầu vào.

Để kiểm thử ứng dụng, hãy thực hiện quy trình sau:

  1. Cài đặt ứng dụng trên một thiết bị có bàn phím phần cứng.

    Nếu bạn không có thiết bị phần cứng có bàn phím, hãy kết nối bàn phím Bluetooth hoặc bàn phím USB.

    Bạn cũng có thể sử dụng trình mô phỏng Android:

    1. Trong Trình quản lý thiết bị Android ảo, hãy nhấp vào New Device (Thiết bị mới) hoặc chọn một hồ sơ hiện có rồi nhấp vào Clone (Sao chép).
    2. Trong cửa sổ hiện ra, hãy đảm bảo bạn đã bật Bàn phímDPad.
  2. Để kiểm thử ứng dụng, hãy chỉ dùng phím Tab để di chuyển qua giao diện người dùng. Đảm bảo mỗi thành phần điều khiển trên giao diện người dùng đều nhận được tiêu điểm như dự kiến.

    Tìm mọi trường hợp tiêu điểm di chuyển theo cách không mong muốn.

  3. Bắt đầu lại từ đầu ứng dụng và di chuyển qua giao diện người dùng bằng các nút điều khiển hướng như các phím mũi tên trên bàn phím. Từ mỗi phần tử có thể lấy tiêu điểm trong giao diện người dùng, hãy nhấn các phím Lên, Xuống, TráiPhải.

    Tìm mọi trường hợp tiêu điểm di chuyển theo cách không mong muốn.

Nếu bạn gặp phải trường hợp nào đó mà việc điều hướng bằng phím Tab hoặc các nút điều khiển hướng không hoạt động như mong đợi, hãy chỉ định vị trí cần đặt tiêu điểm trong bố cục của bạn, như thảo luận trong các phần sau.

Xử lý thao tác bằng phím Tab

Khi người dùng di chuyển trong ứng dụng bằng phím Tab trên bàn phím, hệ thống sẽ chuyển tiêu điểm đầu vào giữa các phần tử dựa trên thứ tự xuất hiện của các phần tử đó trong bố cục. Ví dụ: nếu bạn sử dụng bố cục tương đối và thứ tự của các phần tử trên màn hình khác với thứ tự trong tệp, thì bạn có thể cần chỉ định thứ tự tiêu điểm theo cách thủ công.

Ví dụ: trong bố cục sau, 2 nút được căn chỉnh ở bên phải và một trường văn bản được căn chỉnh ở bên trái của nút thứ hai. Để chuyển tiêu điểm từ nút đầu tiên sang trường văn bản rồi đến nút thứ hai, bố cục cần xác định rõ ràng thứ tự tiêu điểm cho từng phần tử có thể lấy tiêu điểm bằng thuộc tính 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>

Giờ đây, thay vì tiêu điểm di chuyển từ button1 sang button2 rồi đến editText1, tiêu điểm sẽ di chuyển một cách thích hợp theo thứ tự xuất hiện trên màn hình: từ button1 sang editText1 rồi đến button2.

Xử lý thao tác điều hướng theo hướng

Người dùng cũng có thể di chuyển trong ứng dụng của bạn bằng các phím mũi tên trên bàn phím. Thao tác này tương tự như khi di chuyển bằng D-pad hoặc bi xoay. Hệ thống sẽ đưa ra "phỏng đoán tốt nhất" về chế độ xem nào sẽ được lấy tiêu điểm theo một hướng nhất định dựa trên bố cục của các chế độ xem trên màn hình. Tuy nhiên, đôi khi hệ thống đoán sai.

Nếu hệ thống không chuyển tiêu điểm đến khung hiển thị thích hợp khi di chuyển theo một hướng nhất định, hãy chỉ định khung hiển thị nào phải nhận tiêu điểm bằng các thuộc tính sau:

Mỗi thuộc tính chỉ định thành phần hiển thị tiếp theo sẽ nhận tiêu điểm khi người dùng di chuyển theo hướng đó, như được chỉ định theo mã nhận dạng thành phần hiển thị. Điều này được thể hiện trong ví dụ sau:

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

Tài nguyên khác

Hãy tham khảo các tài nguyên liên quan sau: