Ứng dụng của bạn có thể có các nhiệm vụ nhiều bước cho người dùng. Ví dụ: ứng dụng của bạn có thể cần hướng dẫn người dùng thông qua việc mua nội dung bổ sung, thiết lập một chế độ cài đặt cấu hình phức tạp, hoặc chỉ đơn giản là xác nhận quyết định. Tất cả các nhiệm vụ này yêu cầu người dùng phải đi bộ qua một hoặc nhiều nhiệm vụ được sắp xếp các bước hoặc quyết định.
Thư viện androidx.leanback cung cấp các lớp để triển khai các tác vụ nhiều bước của người dùng. Trang này
thảo luận cách sử dụng
GuidedStepSupportFragment
lớp
để hướng dẫn người dùng thực hiện một loạt quyết định để hoàn thành một nhiệm vụ. GuidedStepSupportFragment
sử dụng các phương pháp hay nhất về giao diện người dùng trên TV để giúp bạn dễ dàng nắm bắt và thao tác đối với các tác vụ nhiều bước trên thiết bị TV.
Cung cấp thông tin chi tiết cho một bước
GuidedStepSupportFragment
đại diện cho một bước duy nhất trong chuỗi
bước. Về mặt trực quan, công cụ này cung cấp chế độ xem hướng dẫn kèm theo
danh sách các hành động hoặc quyết định có thể xảy ra cho bước đó.
Đối với mỗi bước trong nhiệm vụ nhiều bước, hãy mở rộng
GuidedStepSupportFragment
và cung cấp thông tin bối cảnh về
bước và hành động mà người dùng có thể thực hiện. Ghi đè
onCreateGuidance()
và trả lại một
GuidanceStylist.Guidance
có chứa ngữ cảnh
thông tin (chẳng hạn như tiêu đề, nội dung mô tả và biểu tượng của bước) như trong ví dụ sau:
Kotlin
override fun onCreateGuidance(savedInstanceState: Bundle?): GuidanceStylist.Guidance { return GuidanceStylist.Guidance( getString(R.string.guidedstep_first_title), getString(R.string.guidedstep_first_description), getString(R.string.guidedstep_first_breadcrumb), activity.getDrawable(R.drawable.guidedstep_main_icon_1) ) }
Java
@Override public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) { String title = getString(R.string.guidedstep_first_title); String breadcrumb = getString(R.string.guidedstep_first_breadcrumb); String description = getString(R.string.guidedstep_first_description); Drawable icon = getActivity().getDrawable(R.drawable.guidedstep_main_icon_1); return new GuidanceStylist.Guidance(title, description, breadcrumb, icon); }
Thêm lớp con GuidedStepSupportFragment
vào lớp con bạn muốn
hoạt động bằng cách gọi
GuidedStepSupportFragment.add()
trong phương thức onCreate()
của hoạt động.
Nếu hoạt động của bạn chỉ chứa GuidedStepSupportFragment
đối tượng, hãy sử dụng GuidedStepSupportFragment.addAsRoot()
thay vì add()
để thêm GuidedStepSupportFragment
đầu tiên. Sử dụng
addAsRoot()
giúp đảm bảo rằng nếu người dùng nhấn nút Quay lại trên điều khiển từ xa của TV khi xem
GuidedStepSupportFragment
đầu tiên, cả hai
GuidedStepSupportFragment
và hoạt động gốc đóng lại.
Lưu ý: Hãy thêm
GuidedStepSupportFragment
đối tượng theo phương thức lập trình,
không có trong tệp XML bố cục của bạn.
Tạo và xử lý các thao tác của người dùng
Thêm hành động của người dùng bằng cách ghi đè
onCreateActions()
.
Trong phần ghi đè, hãy thêm GuidedAction
mới cho mỗi
mục hành động và cung cấp chuỗi hành động, nội dung mô tả và mã hành động. Sử dụng
GuidedAction.Builder
để thêm thao tác mới.
Kotlin
override fun onCreateActions(actions: MutableList<GuidedAction>, savedInstanceState: Bundle?) { super.onCreateActions(actions, savedInstanceState) // Add "Continue" user action for this step actions.add(GuidedAction.Builder() .id(CONTINUE) .title(getString(R.string.guidedstep_continue)) .description(getString(R.string.guidedstep_letsdoit)) .hasNext(true) .build()) ...
Java
@Override public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { // Add "Continue" user action for this step actions.add(new GuidedAction.Builder() .id(CONTINUE) .title(getString(R.string.guidedstep_continue)) .description(getString(R.string.guidedstep_letsdoit)) .hasNext(true) .build()); ...
Các thao tác không bị giới hạn ở việc chọn một dòng. Sau đây là các loại mà bạn có thể tạo:
-
Thêm hành động đối với nhãn thông tin để cung cấp thêm thông tin về lựa chọn của người dùng bằng cách cài đặt
infoOnly(true)
. KhiinfoOnly
là đúng, người dùng sẽ không thể chọn thao tác này. -
Cài đặt để thêm một thao tác có thể chỉnh sửa cho văn bản
editable(true)
. Khieditable
là đúng, người dùng có thể nhập văn bản vào thao tác đã chọn bằng điều khiển từ xa hoặc bàn phím đã kết nối. Ghi đèonGuidedActionEditedAndProceed()
để lấy văn bản sửa đổi mà người dùng đã nhập. Bạn cũng có thể ghi đèonGuidedActionEditCanceled()
để biết thời điểm người dùng huỷ dữ liệu nhập. -
Thêm một tập hợp các thao tác hoạt động như các nút chọn có thể đánh dấu bằng cách sử dụng
checkSetId()
có một giá trị mã nhận dạng chung để nhóm các hành động thành một tập hợp. Tất cả các hành động trong cùng một danh sách có cùng mã nhận dạng bộ kiểm tra đó được coi là đã liên kết. Khi người dùng chọn một trong các hành động trong tập hợp đó, hành động được đánh dấu và tất cả các hành động khác sẽ bị bỏ đánh dấu. -
Thêm một thao tác đối với bộ chọn ngày bằng cách sử dụng
GuidedDatePickerAction.Builder
thay vìGuidedAction.Builder
trongonCreateActions()
. Ghi đèonGuidedActionEditedAndProceed()
để nhận giá trị ngày sửa đổi mà người dùng đã nhập. - Thêm một thao tác sử dụng các hành động phụ để cho phép người dùng chọn từ một danh sách mở rộng lựa chọn. Thao tác phụ được mô tả trong phần Thêm tiểu mục.
- Thêm một nút hành động xuất hiện ở bên phải danh sách thao tác và dễ dàng thực hiện dễ sử dụng. Thao tác của nút được mô tả trong Nút thêm actions.
Bạn cũng có thể thêm chỉ báo trực quan cho biết việc chọn một hành động
dẫn đến một bước mới bằng cách thiết lập
hasNext(true)
.
Đối với tất cả các thuộc tính mà bạn có thể thiết lập, hãy xem
GuidedAction
.
Để phản hồi thao tác, hãy ghi đè
onGuidedActionClicked()
và xử lý thông tin nhập
GuidedAction
Xác định hành động đã chọn bằng
kiểm tra GuidedAction.getId()
.
Thêm các hành động phụ
Một số thao tác có thể yêu cầu bạn cung cấp cho người dùng một nhóm lựa chọn bổ sung. Đáp
GuidedAction
có thể chỉ định danh sách
các thao tác phụ hiển thị dưới dạng trình đơn gồm các thao tác con.
Danh sách hành động phụ có thể chứa các hành động thông thường hoặc hành động bằng nút chọn, nhưng chứ không phải bộ chọn ngày hoặc hành động trên văn bản có thể chỉnh sửa. Ngoài ra, một hành động phụ không được có hành động phụ tập hợp các hành động phụ, bởi vì hệ thống không hỗ trợ nhiều hơn một cấp độ của các hành động phụ.
Để thêm các hành động phụ, trước tiên, hãy tạo và điền danh sách
Các đối tượng GuidedAction
đóng vai trò là hành động phụ, như trong ví dụ sau:
Kotlin
subActions.add(GuidedAction.Builder() .id(SUBACTION1) .title(getString(R.string.guidedstep_subaction1_title)) .description(getString(R.string.guidedstep_subaction1_desc)) .build()) ...
Java
List<GuidedAction> subActions = new ArrayList<GuidedAction>(); subActions.add(new GuidedAction.Builder() .id(SUBACTION1) .title(getString(R.string.guidedstep_subaction1_title)) .description(getString(R.string.guidedstep_subaction1_desc)) .build()); ...
Trong onCreateActions()
, hãy tạo cấp cao nhất
GuidedAction
hiển thị
danh sách các nhóm phụ khi được chọn:
Kotlin
... actions.add(GuidedAction.Builder() .id(SUBACTIONS) .title(getString(R.string.guidedstep_subactions_title)) .description(getString(R.string.guidedstep_subactions_desc)) .subActions(subActions) .build()) ...
Java
@Override public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { ... actions.add(new GuidedAction.Builder() .id(SUBACTIONS) .title(getString(R.string.guidedstep_subactions_title)) .description(getString(R.string.guidedstep_subactions_desc)) .subActions(subActions) .build()); ... }
Cuối cùng, hãy phản hồi các lựa chọn hành động phụ bằng cách ghi đè
onSubGuidedActionClicked()
:
Kotlin
override fun onSubGuidedActionClicked(action: GuidedAction): Boolean { // Check for which action was clicked and handle as needed when(action.id) { SUBACTION1 -> { // Subaction 1 selected } } // Return true to collapse the subactions menu or // false to keep the menu expanded return true }
Java
@Override public boolean onSubGuidedActionClicked(GuidedAction action) { // Check for which action was clicked and handle as needed if (action.getId() == SUBACTION1) { // Subaction 1 selected } // Return true to collapse the subactions menu or // false to keep the menu expanded return true; }
Thêm các thao tác của nút
Nếu bước có hướng dẫn của bạn có nhiều hành động, thì người dùng có thể phải cuộn qua danh sách để truy cập vào các thao tác thường dùng nhất. Sử dụng các thao tác của nút để phân tách các hành động thường dùng trong danh sách hành động. Hành động của nút xuất hiện bên cạnh danh sách hành động và dễ dàng điều hướng đến.
Thao tác đối với nút được tạo và xử lý giống như các thao tác thông thường, nhưng bạn phải tạo
hành động của nút trong
onCreateButtonActions()
thay vì onCreateActions()
. Phản hồi các thao tác của nút trong
onGuidedActionClicked()
.
Sử dụng thao tác trên nút cho các thao tác đơn giản, chẳng hạn như thao tác di chuyển giữa các bước. Không sử dụng hành động bộ chọn ngày hoặc các thao tác có thể chỉnh sửa khác làm thao tác trên nút. Ngoài ra, thao tác của nút không được có hành động phụ.
Nhóm các bước có hướng dẫn thành một trình tự có hướng dẫn
Một GuidedStepSupportFragment
đại diện cho một bước duy nhất. Để tạo một trình tự các bước theo thứ tự, hãy nhóm nhiều bước
GuidedStepSupportFragment
đối tượng kết hợp với nhau bằng
GuidedStepSupportFragment.add()
để thêm
bước tiếp theo trong trình tự vào ngăn xếp mảnh.
Kotlin
override fun onGuidedActionClicked(action: GuidedAction) { val fm = fragmentManager when(action.id) { CONTINUE -> GuidedStepSupportFragment.add(fm, SecondStepFragment()) } }
Java
@Override public void onGuidedActionClicked(GuidedAction action) { FragmentManager fm = getFragmentManager(); if (action.getId() == CONTINUE) { GuidedStepSupportFragment.add(fm, new SecondStepFragment()); } ...
Nếu người dùng nhấn vào nút Quay lại trên điều khiển từ xa của TV, thiết bị sẽ hiển thị
GuidedStepSupportFragment
trên ngăn xếp mảnh. Nếu bạn
cung cấp GuidedAction
của riêng bạn
quay lại bước trước, bạn có thể triển khai hành vi Quay lại bằng cách gọi
getFragmentManager().popBackStack()
Nếu bạn cần đưa người dùng quay lại một bước trước đó trong trình tự, hãy sử dụng
popBackStackToGuidedStepSupportFragment()
để quay lại một GuidedStepSupportFragment
cụ thể trong ngăn xếp mảnh.
Khi người dùng hoàn thành bước cuối cùng trong trình tự, hãy sử dụng
finishGuidedStepSupportFragments()
để xoá tất cả
GuidedStepSupportFragment
thực thể
khỏi ngăn xếp hiện tại và quay lại hoạt động gốc ban đầu. Nếu
đã thêm GuidedStepSupportFragment
đầu tiên
sử dụng addAsRoot()
, gọi
finishGuidedStepSupportFragments()
cũng đóng hoạt động gốc.
Tuỳ chỉnh cách trình bày theo bước
Lớp GuidedStepSupportFragment
có thể sử dụng các tuỳ chỉnh
giao diện kiểm soát các khía cạnh trong bản trình bày như định dạng văn bản tiêu đề hoặc chuyển đổi bước
ảnh động. Giao diện tuỳ chỉnh phải kế thừa từ
Theme_Leanback_GuidedStep
và có thể cung cấp
giá trị ghi đè cho các thuộc tính được xác định trong
GuidanceStylist
và
GuidedActionsStylist
.
Cách áp dụng giao diện tuỳ chỉnh cho GuidedStepSupportFragment
:
thực hiện một trong các thao tác sau:
-
Áp dụng giao diện cho hoạt động gốc bằng cách đặt thuộc tính
android:theme
thành phần tử hoạt động trong tệp kê khai Android. Việc đặt thuộc tính này sẽ áp dụng giao diện cho tất cả thành phần con khung hiển thị và là cách đơn giản nhất để áp dụng một giao diện tuỳ chỉnh nếu hoạt động gốc chỉ chứa Đối tượngGuidedStepSupportFragment
. -
Nếu hoạt động của bạn đã dùng một giao diện tuỳ chỉnh và bạn không muốn áp dụng
GuidedStepSupportFragment
kiểu sang các khung hiển thị khác trong hoạt động, thêmLeanbackGuidedStepTheme_guidedStepTheme
vào giao diện tuỳ chỉnh hiện có cho hoạt động. Thuộc tính này trỏ đến giao diện tuỳ chỉnh chỉ các đối tượngGuidedStepSupportFragment
trong dữ liệu hoạt động. -
Nếu bạn sử dụng các đối tượng
GuidedStepSupportFragment
trong nhiều là một phần của cùng một nhiệm vụ gồm nhiều bước tổng thể và muốn sử dụng một chủ đề hình ảnh trên tất cả các bước, ghi đèGuidedStepSupportFragment.onProvideTheme()
rồi trả về giao diện tuỳ chỉnh của bạn.
Để biết thêm thông tin về cách thêm kiểu và giao diện, hãy xem Kiểu và giao diện.
Lớp GuidedStepSupportFragment
sử dụng các đặc biệt
các lớp tạo mẫu để truy cập và áp dụng các thuộc tính giao diện.
Lớp GuidanceStylist
sử dụng thông tin về giao diện
để kiểm soát việc trình bày chế độ xem hướng dẫn bên trái, trong khi
Lớp GuidedActionsStylist
sử dụng thông tin về giao diện
để kiểm soát việc trình bày khung hiển thị hành động phù hợp.
Để tuỳ chỉnh kiểu hình ảnh của các bước ngoài những tính năng tuỳ chỉnh giao diện cung cấp, hãy tạo lớp con
GuidanceStylist
hoặc
GuidedActionsStylist
rồi trả về lớp con trong
GuidedStepSupportFragment.onCreateGuidanceStylist()
hoặc
GuidedStepSupportFragment.onCreateActionsStylist()
.
Để biết thông tin chi tiết về những nội dung bạn có thể tuỳ chỉnh trong các lớp con này, hãy xem tài liệu về
GuidanceStylist
và
GuidedActionsStylist