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:

Hình ảnh cho thấy các lựa chọn ưu tiên kèm theo danh mục
Hình 1. Các lựa chọn ưu tiên trong danh mục.

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Đồng bộ hoá.

Hình ảnh cho thấy màn hình lựa chọn ưu tiên có các hệ phân cấp
Hình 2. Một hệ phân cấp đơn giản gồm hai danh mục.

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:

Hình ảnh cho thấy một hệ phân cấp được chia thành nhiều màn hình
Hình 3. Một hệ phân cấp đượ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 PreferenceFragment 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 &lt;PreferenceScreen&gt; 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.