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 thấy một chế độ cài đặt cụ thể mà họ muốn thay đổi. Thư viện lựa chọn ưu tiên cung cấp các cách sau để sắp xếp các màn hình cài đặt một cách hiệu quả hơn.
Danh mục lựa chọn ưu tiên
Nếu có một số đối tượng Preference
có liên quan trên một màn hình, bạn có thể nhóm các đối tượng đó bằng PreferenceCategory
. PreferenceCategory
hiển thị tiêu đề danh mục và phân tách danh mục một cách trực quan.
Để xác định PreferenceCategory
trong XML, hãy gói các 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ó số lượng lớn đối tượng Preference
hoặc các danh mục riêng biệt, bạn có thể cho thấy các đối tượ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. Sau đó, các đối tượng Preference
trên màn hình ban đầu có thể liên kết đến màn hình phụ có chứa các lựa chọn ưu tiên liên quan.
Hình 2 cho thấy một hệ phân cấp đơn giản chứa hai danh mục: Messages (Thông báo) và Sync (Đồ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 với Preference
, bạn có thể khai báo app:fragment
trong XML hoặc sử dụng Preference.setFragment()
.
Khởi chạy tên gói đầy đủ của PreferenceFragmentCompat
khi
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, đồng thời là nơi triển khai màn hình 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
Chúng tôi không còn hỗ trợ việc khai báo hệ phân cấp lồng nhau trong cùng một tài nguyên XML bằng <PreferenceScreen>
lồng nhau. Thay vào đó, hãy sử dụng các đối tượng Fragment
lồng nhau.
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 ứng dụng, bạn không nên thực hiện việc 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.