Một số thiết bị Wear OS có nút xoay ở cạnh. Khi người dùng vặn nút, nút này sẽ cuộn lên hoặc xuống chế độ xem hiện tại của ứng dụng. Dạng nhập dữ liệu đầu vào này được gọi là phương thức nhập dữ liệu xoay.
Lưu ý: Hướng dẫn này chủ yếu đề cập đến cách xử lý phương thức nhập dữ liệu xoay qua giao diện người dùng dựa trên Thành phần hiển thị. Để biết thêm thông tin về cách xử lý phương thức nhập dữ liệu xoay qua Compose cho Wear OS, hãy xem phần Phương thức nhập dữ liệu xoay trên Compose.
Nhiều vùng chứa có thể cuộn, chẳng hạn như ScrollView
, ListView
, HorizontalScrollView
và WearableRecyclerView
, hỗ trợ phương thức nhập dữ liệu xoay nếu chúng có tiêu điểm mà không cần phải có đoạn mã cụ thể cho Wear OS.
Có tiêu điểm là một điều kiện tiên quyết quan trọng vì trên Android 9 (API cấp 28) trở lên, các chế độ xem hoàn toàn không nhận được tiêu điểm.
Các phương pháp hay nhất về tiêu điểm
Để phản hồi các sự kiện nhập dữ liệu xoay, vùng chứa có thể cuộn phải có tiêu điểm.
Các sự kiện nhập dữ liệu xoay không làm bật lên hệ phân cấp chế độ xem. Nếu không có chế độ xem tập trung hoặc nếu chế độ xem tập trung trả về false
qua View.onGenericMotionEvent()
thì sự kiện sẽ được gửi đến Activity.onGenericMotionEvent()
.
Dưới đây là các phương pháp hay nhất để phản hồi sự kiện nhập dữ liệu xoay:
- Hãy lưu ý rằng, theo mặc định, việc chạy một hoạt động hoặc thậm chí là nhấn vào một chế độ xem không tạo ra được tiêu điểm, ngay cả khi hoạt động đó có thể là tâm điểm. Để lấy tiêu điểm cho chế độ xem của bạn, chế độ xem phải sử dụng thẻ
<requestFocus />
hoặc gọiView.requestFocus()
theo cách thủ công. - Đánh dấu các chế độ xem cuộn tuỳ chỉnh dưới dạng thành phần có thể lấy tiêu điểm bằng cách sử dụng cả
android:focusable="true"
vàandroid:focusableInTouchMode="true"
. - Nếu chế độ xem cuộn được đính kèm sau
Activity.onCreate()
(ví dụ: đợi một yêu cầu mạng kết thúc trước khi xây dựng giao diện người dùng), hãy gọirequestFocus()
sau khi đính kèm chế độ xem cuộn này. - Nếu chế độ xem cuộn ban đầu là
INVISIBLE
hoặcGONE
, hãy gọirequestFocus()
khi bạn đặt thànhVISIBLE
. - Nếu hoạt động có nhiều chế độ xem cuộn, hãy chọn một thành phần để tập trung (lấy tiêu điểm) thông qua thẻ
<requestFocus />
. Tính năng cuộn lồng nhau không được nút xoay bên hông hỗ trợ. - Nếu giao diện người dùng của bạn chứa một số chế độ xem khác lấy tiêu điểm khi người dùng tương tác (ví dụ:
InputText
), hãy cung cấp cho người dùng cách để khôi phục tiêu điểm về chế độ xem cuộn nếu chế độ xem này bị mất tiêu điểm bằng cách nghe thao tác nhấn vào chế độ xem cuộn và gọirequestFocus()
để phản hồi.
Hành vi xoay tuỳ chỉnh
Nếu chế độ xem cuộn không hỗ trợ thao tác cuộn phương thức nhập dữ liệu xoay, hoặc nếu bạn muốn sử dụng phương thức nhập dữ liệu xoay cho thao tác khác thay vì cuộn (ví dụ: phóng to/thu nhỏ hoặc quay số), bạn có thể tự xử lý các sự kiện cuộn. Hãy nhớ đảm bảo chế độ xem của bạn lấy được tiêu điểm. Nếu không, các sự kiện sẽ không diễn ra.
Đoạn mã sau đây cho biết cách sử dụng MotionEvent
, InputDeviceCompat
, và ViewConfigurationCompat
để thêm tính năng cuộn tuỳ chỉnh vào chế độ xem của bạn:
Kotlin
myView.setOnGenericMotionListener { v, ev -> if (ev.action == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ) // Swap these axes to scroll horizontally instead v.scrollBy(0, delta.roundToInt()) true } else { false } }
Java
myView.setOnGenericMotionListener(new View.OnGenericMotionListener() { @Override public boolean onGenericMotion(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ); // Swap these axes to scroll horizontally instead v.scrollBy(0, Math.round(delta)); return true; } return false; } });
Thử nghiệm bằng trình mô phỏng
Sử dụng Trình mô phỏng Android để mô phỏng thao tác cuộn phương thức nhập dữ liệu xoay trên thiết bị Wear. Mở ứng dụng Wear trên trình mô phỏng để chạy dự án hoặc kéo tệp APK vào trình mô phỏng để cài đặt.
Cách kiểm thử phương thức nhập dữ liệu xoay trên trình mô phỏng:
- Từ Trình quản lý SDK, hãy sử dụng thẻ Bộ công cụ SDK để tải Trình mô phỏng Android 26.0.3 trở lên.
- Trong Android Studio, hãy chọn Tools > Android > AVD Manager (Công cụ > Android > Trình quản lý thiết bị ảo Android). Tạo thiết bị Wear mới bằng API 25 trở lên.
- Chạy trình mô phỏng bằng Android Studio.
- Nhấp vào nút ba dấu chấm của trình đơn mục bổ sung ở cuối thanh công cụ của trình mô phỏng. Nhấp vào thẻ Phương thức nhập dữ liệu xoay trong cửa sổ mới để mở giao diện nhập dữ liệu xoay và thử cuộn phương thức nhập dữ liệu xoay.
Video sau đây cho thấy phương thức nhập dữ liệu xoay trong trình mô phỏng: