Sắp xếp các chế độ cài đặt Một phần của Android Jetpack.
Các màn hình cài đặt lớn và phức tạp có thể khiến người dùng khó tìm một cài đặt cụ thể mà họ muốn thay đổi. Thư viện Lựa chọn ưu tiên cung cấp những cách sau để sắp xếp màn hình cài đặt của bạn hiệu quả hơn.
Danh mục lựa chọn ưu tiên
Nếu bạn có một số
Các đối tượng Preference
trên một đối tượng
bạn có thể nhóm chúng bằng
PreferenceCategory
. Đáp
PreferenceCategory
hiển thị tiêu đề danh mục và tách riêng phần
danh mục.
Để xác định PreferenceCategory
trong XML, hãy gói thẻ Preference
bằng một
PreferenceCategory
, như sau:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory app:key="notifications_category" app:title="Notifications"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> </PreferenceCategory> <PreferenceCategory app:key="help_category" app:title="Help"> <Preference app:key="feedback" app:summary="Report technical issues or suggest new features" app:title="Send feedback"/> </PreferenceCategory> </PreferenceScreen>
Kết quả sẽ có dạng như sau:
Chia hệ thống phân cấp của bạn thành nhiều màn hình
Nếu có nhiều đối tượng Preference
hoặc danh mục riêng biệt, bạn
có thể hiển thị chúng trên các màn hình riêng biệt. Mỗi màn hình là một
PreferenceFragmentCompat
có hệ phân cấp riêng. Preference
đối tượng
Trên màn hình ban đầu, bạn có thể
liên kết đến các màn hình phụ chứa thông tin
tùy chọn.
Hình 2 cho thấy một hệ phân cấp đơn giản gồm hai danh mục: Thông báo và Đồng bộ hoá.
Hình 3 cho thấy cùng một nhóm lựa chọn ưu tiên được chia thành nhiều màn hình:
Để liên kết màn hình bằng Preference
, bạn có thể khai báo app:fragment
trong XML hoặc
bạn có thể sử dụng
Preference.setFragment()
.
Chạy tên gói đầy đủ của PreferenceFragmentCompat
khi
người dùng nhấn vào Preference
như trong ví dụ sau:
<Preference app:fragment="com.example.SyncFragment" .../>
Khi người dùng nhấn vào một Preference
có Fragment
liên kết, phương thức
giao diện
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
sẽ được gọi. Phương thức này là nơi bạn xử lý việc hiển thị màn hình mới và nơi
màn hình được triển khai trong Activity
xung quanh.
Cách triển khai thông thường sẽ có dạng như sau:
Kotlin
class MyActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { // Instantiate the new Fragment. val args = pref.extras val fragment = supportFragmentManager.fragmentFactory.instantiate( classLoader, pref.fragment) fragment.arguments = args fragment.setTargetFragment(caller, 0) // Replace the existing Fragment with the new Fragment. supportFragmentManager.beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit() return true } }
Java
public class MyActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... @Override public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) { // Instantiate the new Fragment. final Bundle args = pref.getExtras(); final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate( getClassLoader(), pref.getFragment()); fragment.setArguments(args); fragment.setTargetFragment(caller, 0); // Replace the existing Fragment with the new Fragment. getSupportFragmentManager().beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit(); return true; } }
PreferenceScreens
Khai báo hệ phân cấp lồng nhau trong cùng một tài nguyên XML bằng cách sử dụng hệ thống phân cấp lồng nhau
<PreferenceScreen>
không còn được hỗ trợ nữa. Sử dụng các đối tượng Fragment
lồng nhau
thay thế.
Sử dụng Hoạt động riêng biệt
Ngoài ra, nếu cần tuỳ chỉnh nhiều màn hình hay chuyển đổi toàn bộ Activity
giữa các màn hình thì bạn có thể sử dụng Activity
riêng cho mỗi PreferenceFragmentCompat
. Bằng cách này, bạn có thể tuỳ chỉnh toàn bộ
Activity
và màn hình cài đặt tương ứng. Đối với hầu hết các ứng dụng, chúng tôi không
đề xuất nội dung này; thay vào đó, hãy sử dụng Fragments
như mô tả trước đó.
Để biết thêm thông tin về cách chạy Activity
từ Preference
, hãy xem
Thao tác liên quan đến lựa chọn ưu tiên.