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

Ngoài các phương thức nhập mềm (chẳng hạn như bàn phím ảo), Android hỗ trợ bàn phím vật lý đi kèm thiết bị. Bàn phím cung cấp chế độ thuận tiện cho việc nhập văn bản cũng như 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ự phổ biến và nhiều người dùng thích đính kèm các phụ kiện bàn phím.

Vì ngày càng có nhiều thiết bị chạy Android cung cấp loại trải nghiệm này, bạn cần phải tối ưu hoá ứng dụng của mình để hỗ trợ 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 tính năng điều hướng bằng bàn phím.

Kiểm tra ứng dụng của bạn

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

Tất cả tiện ích tương tác do khung Android cung cấp (chẳng hạn như ButtonEditText) đều có thể làm tâm điểm. Tức là người dùng có thể thao tác bằng các thiết bị điều khiển như D-pad hoặc bàn phím. Mỗi tiện ích sẽ làm sáng hoặc thay đổi giao diện khi có được tâm điểm nhập.

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

  1. Cài đặt ứng dụng của bạn trên một thiết bị có cung cấp 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ị ảo Android, 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ổ xuất hiện, hãy đảm bảo bạn đã bật KeyboardDPad.
  2. Để kiểm thử ứng dụng, chỉ sử dụng phím Tab để di chuyển qua giao diện người dùng. Hãy đảm bảo mọi thành phần điều khiển trên giao diện người dùng đều được lấy 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 chế độ điều khiển hướng như các phím mũi tên trên bàn phím. Trên mỗi phần tử có thể làm tâm điểm trong giao diện người dùng, hãy nhấn Up (Lên), Down (Xuống), Left (Trái) và Right (Phả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 bất kỳ trường hợp nào mà việc điều hướng bằng phím Tab hoặc các tuỳ chọn điều khiển hướng không hoạt động như bạn mong đợi, hãy chỉ định vị trí của tâm điểm trong bố cục, như thảo luận trong các phần sau.

Xử lý thao tác điều hướng bằng thẻ

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 tâm điểm nhập giữa các phần tử dựa trên thứ tự xuất hiện trong bố cục. Ví dụ: nếu sử dụng bố cục tương đối và thứ tự của các thành phần 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 nút thứ hai. Để chuyển tiêu điểm từ nút đầu tiên đến trường văn bản rồi đến nút thứ hai, bố cục cần xác định rõ thứ tự tâm điểm cho từng phần tử có thể làm tâm đ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 editText1, tiêu điểm này sẽ di chuyển một cách thích hợp theo giao diện trên màn hình: từ button1 đến editText1 rồi đến button2.

Xử lý tính năng đ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 hoạt động giống như khi di chuyển bằng D-pad hoặc bi xoay. Hệ thống đưa ra "dự đoán tốt nhất" về thành phần hiển thị cần lấy làm tâm điểm theo một hướng nhất định dựa trên bố cục của các thành phần hiển thị trên màn hình. Tuy nhiên, đôi khi hệ thống đoán sai.

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

Mỗi thuộc tính chỉ định khung hiển thị tiếp theo để nhận tiêu điểm khi người dùng di chuyển theo hướng đó, như được chỉ định bởi mã khung 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 thông tin có liên quan sau: