Các thiết bị TV cung cấp một số ít chế độ điều khiển điều hướng cho ứng dụng. Việc tạo một sơ đồ điều hướng hiệu quả cho ứng dụng truyền hình của bạn phụ thuộc vào việc nắm bắt những chế độ kiểm soát hạn chế này cũng như những hạn chế của người dùng khi vận hành ứng dụng. Khi bạn tạo ứng dụng Android cho TV, hãy đặc biệt chú ý đến cách người dùng điều hướng khi sử dụng các nút trên điều khiển từ xa thay vì màn hình cảm ứng.
Nguyên tắc
Mục tiêu là giúp người dùng cảm thấy quen thuộc và thoải mái khi thao tác mà không làm giao diện người dùng trở nên rối rắm hoặc khiến họ mất tập trung vào nội dung. Các nguyên tắc sau đây giúp đặt tiêu chí để trải nghiệm người dùng nhất quán và trực quan trên các ứng dụng truyền hình.
Đơn giản hoá quy trình truy cập vào nội dung. Người dùng muốn truy cập nội dung một cách nhanh chóng, chỉ bằng một số ít lượt nhấp. Sắp xếp thông tin theo cách cần ít màn hình nhất.
Làm theo các phương pháp hay nhất và đề xuất để người dùng có thể dự đoán được thao tác điều hướng. Không cần thiết phải tạo lại các mẫu điều hướng, vì điều này sẽ gây nhầm lẫn và khó đoán.
Đơn giản hoá thao tác điều hướng để hỗ trợ liền mạch các hành vi của người dùng được áp dụng rộng rãi. Đừng làm phức tạp quá mức bằng cách thêm các lớp điều hướng không cần thiết.
Bộ điều khiển
Bộ điều khiển có nhiều kiểu dáng, từ bộ điều khiển từ xa tối giản đến bộ điều khiển trò chơi phức tạp. Tất cả bộ điều khiển đều có một nút định hướng (D-pad) cùng với các nút chọn, nút trang chủ và nút quay lại. Các nút khác sẽ khác nhau tuỳ theo mẫu.
D-pad
Phương thức điều hướng chính trên TV là thông qua D-pad, bao gồm các nút phần cứng điều hướng lên, xuống, trái và phải. D-pad chuyển tiêu điểm từ một đối tượng sang đối tượng gần nhất theo hướng của nút được nhấn.
Nút chọn
Chọn mục trên màn hình đang được lấy tiêu điểm.
Nút Màn hình chính
Đưa người dùng đến Màn hình chính của hệ thống.
Nút quay lại
Giúp người dùng quay lại chế độ xem trước.
Nút micrô
Kích hoạt Trợ lý Google hoặc tính năng nhập bằng giọng nói.
Điều hướng bằng D-pad
Trên thiết bị TV, người dùng thao tác bằng cách sử dụng bàn phím di chuyển hoặc các phím mũi tên. Loại chế độ cài đặt này giới hạn chuyển động theo hướng lên, xuống, trái và phải. Để tạo một ứng dụng được tối ưu hoá cho TV, bạn phải cung cấp một sơ đồ điều hướng để người dùng có thể nhanh chóng tìm hiểu cách điều hướng trong ứng dụng của bạn bằng các chế độ điều khiển hạn chế này.
Khung Android tự động xử lý thao tác điều hướng theo hướng giữa các phần tử bố cục, vì vậy, thường thì bạn không cần phải làm gì thêm cho ứng dụng của mình. Tuy nhiên, bạn nên kiểm thử kỹ lưỡng thao tác điều hướng bằng bộ điều khiển D-pad để phát hiện mọi vấn đề về thao tác điều hướng.
Hãy làm theo các nguyên tắc này để kiểm thử và đảm bảo hệ thống điều hướng của ứng dụng hoạt động tốt với một D-pad trên thiết bị TV:
- Đảm bảo rằng người dùng có bộ điều khiển D-pad có thể chuyển đến tất cả các nút điều khiển hiển thị trên màn hình.
- Đối với danh sách có thể cuộn khi có tiêu điểm, hãy đảm bảo rằng các nút lên và xuống trên D-pad sẽ cuộn danh sách và nút chọn sẽ chọn một mục trong danh sách. Xác minh rằng người dùng có thể chọn một phần tử trong danh sách và danh sách vẫn cuộn khi một phần tử được chọn.
- Đảm bảo rằng việc chuyển đổi giữa các chế độ kiểm soát diễn ra đơn giản và có thể dự đoán được.
Sửa đổi chế độ điều hướng theo hướng
Khung Android sẽ tự động áp dụng một sơ đồ điều hướng theo hướng dựa trên vị trí tương đối của các phần tử có thể lấy tiêu điểm trong bố cục của bạn. Kiểm thử sơ đồ điều hướng đã tạo trong ứng dụng bằng bộ điều khiển D-pad. Sau khi kiểm thử, nếu quyết định rằng bạn muốn người dùng di chuyển qua bố cục theo một cách cụ thể, bạn có thể thiết lập chế độ điều hướng theo hướng rõ ràng cho các thành phần điều khiển.
Đoạn mã mẫu sau đây cho biết cách xác định chế độ điều khiển tiếp theo sẽ nhận tiêu điểm cho đối tượng bố cục TextView:
<TextView android:id="@+id/Category1" android:nextFocusDown="@+id/Category2" />
Bảng sau đây liệt kê tất cả các thuộc tính điều hướng có sẵn cho các tiện ích giao diện người dùng Android:
| Thuộc tính | Chức năng |
|---|---|
nextFocusDown |
Xác định khung hiển thị tiếp theo sẽ nhận tiêu điểm khi người dùng di chuyển xuống. |
nextFocusLeft |
Xác định khung hiển thị tiếp theo sẽ nhận tiêu điểm khi người dùng di chuyển sang trái. |
nextFocusRight |
Xác định khung hiển thị tiếp theo sẽ nhận tiêu điểm khi người dùng di chuyển sang phải. |
nextFocusUp |
Xác định khung hiển thị tiếp theo sẽ nhận tiêu điểm khi người dùng di chuyển lên. |
Để sử dụng một trong những thuộc tính điều hướng rõ ràng này, hãy đặt giá trị thành android:id của một tiện ích khác trong bố cục. Hãy nhớ thiết lập thứ tự điều hướng dưới dạng một vòng lặp, để chế độ kiểm soát cuối cùng chuyển tiêu điểm trở lại chế độ kiểm soát đầu tiên.
Cung cấp tiêu điểm và lựa chọn rõ ràng
Mức độ thành công của sơ đồ điều hướng của một ứng dụng trên thiết bị TV phụ thuộc vào việc người dùng có thể nhanh chóng xác định phần tử giao diện người dùng nào đang ở trọng tâm hay không. Nếu bạn không cho biết rõ mục tiêu hiện tại và do đó, người dùng không biết mục nào họ có thể thao tác, thì họ có thể nhanh chóng cảm thấy khó chịu và thoát khỏi ứng dụng của bạn. Vì lý do tương tự, bạn phải luôn có một mục tiêu hiện tại mà người dùng có thể thao tác ngay sau khi ứng dụng của bạn khởi động hoặc bất cứ lúc nào ứng dụng ở trạng thái rảnh.
Trong bố cục và quá trình triển khai ứng dụng, hãy sử dụng màu sắc, kích thước, ảnh động hoặc kết hợp các thuộc tính này để giúp người dùng xác định những hành động mà họ có thể thực hiện tiếp theo. Sử dụng một sơ đồ đồng nhất để cho biết tiêu điểm trên ứng dụng của bạn.
Android cung cấp Tài nguyên danh sách trạng thái có thể vẽ để triển khai điểm nổi bật cho các chế độ điều khiển được chọn và có tiêu điểm. Ví dụ về mã sau đây minh hoạ cách bật hành vi trực quan cho một nút để cho biết rằng người dùng đã chuyển đến chế độ điều khiển rồi chọn nút đó:
<!-- res/drawable/button.xml --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_pressed" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/button_focused" /> <!-- focused --> <item android:state_hovered="true" android:drawable="@drawable/button_focused" /> <!-- hovered --> <item android:drawable="@drawable/button_normal" /> <!-- default --> </selector>
Đoạn mã XML bố cục mẫu sau đây áp dụng đối tượng có thể vẽ trong danh sách trạng thái trước đó cho một Button:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/button" />
Đảm bảo cung cấp đủ khoảng đệm trong các nút có thể lấy tiêu điểm và chọn được để các điểm nổi bật xung quanh chúng xuất hiện rõ ràng.
Thao tác bằng nút quay lại
Để đảm bảo tính nhất quán giữa các ứng dụng trên nền tảng, hãy đảm bảo hành vi của nút quay lại tuân thủ các nguyên tắc sau.
Sử dụng hành vi dễ đoán của nút quay lại
Để tạo trải nghiệm điều hướng đơn giản và dễ dự đoán, khi người dùng nhấn nút quay lại trên điều khiển từ xa, hãy đưa họ đến đích đến trước đó.
Nếu người dùng di chuyển từ một mục trong trình đơn đến một thẻ ở giữa trang rồi nhấn nút quay lại, kết quả sẽ phụ thuộc vào việc ứng dụng sử dụng chế độ điều hướng trên cùng hay điều hướng bên trái:
- Ứng dụng sử dụng chế độ điều hướng trên cùng: đưa người dùng quay lại đầu trang bằng cách cuộn nhanh và kích hoạt tiêu điểm trên trình đơn.
- Ứng dụng sử dụng chế độ điều hướng bên trái: kích hoạt trình đơn bên trái và tập trung vào mục trình đơn hiện đang hoạt động.
Đảm bảo rằng nút quay lại không bị chặn bởi màn hình xác nhận hoặc nằm trong một vòng lặp vô hạn.
Không nên.
Tránh yêu cầu người dùng thực hiện hành động trước khi rời khỏi trang. Cho phép người dùng thoát khỏi ứng dụng mà không cần xác nhận.
Không nên.
Không bao giờ rơi vào vòng lặp vô hạn của việc đóng và mở trình đơn. Tốt nhất là khi nhấn nút quay lại, người dùng sẽ thoát khỏi ứng dụng. Đừng hiện nút thoát trên trình đơn trừ phi đó là trường hợp đặc biệt, chẳng hạn như hồ sơ của trẻ em.
Không hiển thị nút lên hoặc nút quay lại
Không giống như trên thiết bị cầm tay, nút quay lại trên điều khiển từ xa được dùng để di chuyển ngược lại trên TV. Bạn không cần phải hiện nút quay lại ảo trên màn hình:
Không nên.
Hiện nút huỷ nếu cần
Nếu các thao tác duy nhất mà người dùng nhìn thấy là thao tác xác nhận, thao tác huỷ hoặc thao tác mua hàng, thì bạn nên có nút Huỷ để quay lại đích đến trước đó:
Nên làm.
Triển khai thao tác điều hướng quay lại
Khung Android thường xử lý tốt thao tác điều hướng quay lại, cũng như đối với D-pad. Nếu sử dụng Thành phần điều hướng, bạn có thể hỗ trợ nhiều biểu đồ điều hướng. Đôi khi, bạn có thể cần triển khai một số hành vi tuỳ chỉnh, chẳng hạn như nút quay lại đặt lại tiêu điểm về đầu một danh sách dài.
ComponentActivity, lớp cơ sở cho FragmentActivity và AppCompatActivity cho phép kiểm soát hành vi của nút quay lại bằng cách sử dụng OnBackPressedDispatcher mà bạn có thể truy xuất bằng cách gọi getOnBackPressedDispatcher().
Để biết thêm thông tin, hãy xem bài viết Cung cấp điều hướng quay lại tuỳ chỉnh.
Điều khiển chế độ phát trên TV
Phát video là một trong những tính năng quan trọng nhất trên TV. Điều quan trọng là trình phát video trong các ứng dụng trên Android TV phải hoạt động giống nhau. Tham khảo nguyên tắc về bộ điều khiển chế độ phát cho TV.
Thao tác bằng phím Tab trong sự kiện phát trực tiếp
Ngoài việc tuân thủ các yêu cầu về chất lượng của ứng dụng truyền hình, những ứng dụng có nguồn cấp dữ liệu truyền hình trực tiếp được tích hợp trên thẻ Trực tiếp cũng phải đáp ứng các yêu cầu về việc phát và phát lại nội dung trực tiếp sao cho mượt mà, như mô tả trong các phần sau.
Phát liền mạch
Tính năng phát mượt mà áp dụng cho hành vi trong ứng dụng sau khi bạn nhấp vào bất kỳ đường liên kết sâu nào đến kênh Trực tiếp hoặc Tuyến tính trên Google TV và Android TV.
Khi người dùng nhấp vào một đường liên kết sâu, các quy tắc sau sẽ áp dụng:
- Không có độ trễ: Người dùng phải được chuyển thẳng đến chế độ phát kênh mà không có màn hình chặn hoặc trì hoãn, chẳng hạn như quy trình đăng nhập hoặc đăng ký hoặc video có thương hiệu.
- Ngoại lệ khởi động nguội: Nếu đường liên kết sâu bắt đầu tải ứng dụng mục tiêu từ quá trình khởi động nguội, thì độ trễ khởi động được cho phép. Trong trường hợp này, bạn cũng được phép sử dụng video hoặc ảnh động có thương hiệu khi khởi động ứng dụng.
- Ngoại lệ về độ trễ khi tải: Nếu mất vài giây để chuyển sang kênh, thì bạn được phép hiển thị thành phần xây dựng thương hiệu. Thời lượng chỉ được kéo dài trong thời gian cần thiết để tải kênh.
Nếu người dùng đã đăng xuất hoặc chưa đăng ký, bạn có thể chặn quá trình phát của một kênh có tính phí để hoàn tất quy trình đăng nhập hoặc đăng ký.
Direct-back
Khi người dùng chạy một ứng dụng từ một đường liên kết sâu trên thẻ Trực tiếp, sau đó nhấn nút quay lại, họ phải được chuyển về thẻ Trực tiếp chỉ bằng một lần nhấn nút quay lại, bất kể thời gian đã trôi qua là bao lâu. Bạn phải có hành vi phát lại trực tiếp đối với tất cả đường liên kết sâu trên thẻ Trực tiếp trên Google TV và Android TV.
Đường liên kết sâu đến thẻ Trực tiếp được phân biệt bằng một tham số đường liên kết sâu được thêm vào: ?exit_on_back=[true|false]. Các ứng dụng phải phân tích cú pháp tham số này để xác định xem ứng dụng có được khởi chạy từ thẻ Trực tiếp hay không. Nếu exit_on_back là true, thì các ứng dụng phải triển khai hành vi quay lại trực tiếp.
Xin lưu ý rằng nếu người dùng nhấn vào nút bất kỳ khác ngoài nút quay lại khi nhấn nút lần đầu tiên sau đường liên kết sâu, thì yêu cầu quay lại trực tiếp sẽ không áp dụng và chỉ yêu cầu hành vi của nút quay lại tiêu chuẩn.
Ví dụ: giả sử sau khi truy cập vào một đường liên kết sâu, người dùng nhấn nút chọn của D-pad, thao tác này sẽ hiển thị một lớp phủ điều khiển. Người dùng đợi lớp phủ biến mất, rồi nhấn nút quay lại. Vì nút đầu tiên được nhấn sau khi người dùng chuyển đến đường liên kết sâu là nút chọn trên D-pad, nên yêu cầu quay lại trực tiếp không áp dụng. Thay vào đó, logic ngăn xếp lui của ứng dụng thông thường sẽ được áp dụng.
Thao tác nhấn nút quay lại nhiều lần phải đưa người dùng đến thư mục gốc của ứng dụng, sau đó quay lại Google TV hoặc Android TV mà không có bất kỳ vòng lặp vô hạn nào. Để biết thêm thông tin, hãy xem phần Hành vi nút quay lại có thể dự đoán.
Cấu trúc điều hướng
Cấu trúc điều hướng được xác định rõ ràng giúp người dùng biết họ đang ở đâu trong ứng dụng của bạn và cách truy cập vào các nội dung khác nhau. Hãy xem xét các khía cạnh sau đây của thiết kế điều hướng.
Điểm bắt đầu cố định
Màn hình đầu tiên người dùng nhìn thấy khi khởi chạy ứng dụng từ trình chạy cũng là màn hình cuối cùng người dùng nhìn thấy khi họ quay lại trình chạy sau khi nhấn nút quay lại.
Phương pháp liên kết sâu mô phỏng thao tác điều hướng thủ công
Cho dù là liên kết sâu hay điều hướng thủ công tới một đích đến cụ thể, người dùng đều có thể sử dụng nút quay lại để di chuyển qua các đích đến trở lại đích đến bắt đầu.
Phương pháp liên kết sâu vào một ứng dụng từ một ứng dụng khác mô phỏng thao tác điều hướng thủ công. Ví dụ: nếu người dùng chuyển thẳng đến trang thông tin chi tiết trên ứng dụng Moviestar từ Google TV rồi nhấn nút quay lại, họ sẽ được đưa đến Trang chủ của ứng dụng Moviestar.
Đường dẫn rõ ràng đến tất cả các phần tử có thể lấy tiêu điểm
Cho phép người dùng điều hướng giao diện người dùng của bạn một cách rõ ràng. Nếu không có đường dẫn thẳng để đến một nút điều khiển, hãy cân nhắc việc di chuyển nút điều khiển đó.
Làm.
Đặt các chế độ kiểm soát (chẳng hạn như thao tác tìm kiếm xuất hiện ở đây) ở những vị trí không trùng lặp với các phần tử có thể nhấp khác.
Không nên.
Tránh những bố cục có các chế độ kiểm soát ở những nơi khó tiếp cận. Khó có thể thực hiện thao tác tìm kiếm xuất hiện ở đây bằng d-pad.
Trục
Thiết kế bố cục để tận dụng cả trục ngang và trục dọc. Đặt cho mỗi hướng một chức năng cụ thể để có thể nhanh chóng điều hướng các hệ thống phân cấp lớn.
Thực hiện.
Bạn có thể di chuyển qua các danh mục trên trục dọc và duyệt xem các mục trong từng danh mục trên trục ngang.
Không nên.
Tránh các hệ phân cấp bố cục phức tạp và lồng nhau.