سازمان‌دهی تنظیمات   بخشی از Android Jetpack.

صفحه‌نمایش‌های تنظیمات بزرگ و پیچیده می‌توانند پیدا کردن تنظیم خاصی را که کاربر می‌خواهد تغییر دهد دشوار کنند. کتابخانه Preference روش‌های زیر را برای سازمان‌دهی بهتر صفحه‌های تنظیمات ارائه می‌دهد.

دسته‌های اولویت

اگر چند شیء Preference مرتبط در یک صفحه دارید، می‌توانید آن‌ها را بااستفاده از PreferenceCategory گروه‌بندی کنید. A PreferenceCategory عنوان دسته را نمایش می‌دهد و دسته را به‌صورت بصری جدا می‌کند.

برای تعریف PreferenceCategory در XML، برچسب‌های Preference را با PreferenceCategory به‌صورت زیر بپوشانید:

<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>

نتیجه به‌صورت زیر است:

تصویری که اولویت‌ها را با دسته‌ها نشان می‌دهد
شکل ۱. اولویت‌ها در دسته‌ها.

تقسیم سلسله‌مراتب به چند صفحه

اگر تعداد زیادی شیء Preference یا دسته‌های متمایز دارید، می‌توانید آن‌ها را در صفحه‌های جداگانه نمایش دهید. هر صفحه یک PreferenceFragmentCompat با سلسله‌مراتب جداگانه خودش است. Preference شیء در صفحه اولیه شما می‌تواند به زیرصفحه‌هایی پیوند داده شود که حاوی اولویت‌های مرتبط است.

شکل ۲ سلسله‌مراتب ساده‌ای را نشان می‌دهد که شامل دو دسته است: پیام‌ها و همگام‌سازی.

تصویری که صفحه اولویت‌ها را با سلسله‌مراتب نشان می‌دهد
شکل ۲. سلسله‌مراتب ساده با دو دسته.

شکل ۳ همان مجموعه اولویت‌ها را نشان می‌دهد که به چند صفحه تقسیم شده است:

تصویری که سلسله‌مراتبی را نشان می‌دهد که به چند صفحه تقسیم شده است
شکل ۳. سلسله‌مراتبی که به چند صفحه تقسیم شده است.

برای پیوند دادن صفحه‌ها با Preference، می‌توانید app:fragment را در XML اعلام کنید یا می‌توانید از Preference.setFragment() استفاده کنید. نام کامل بسته PreferenceFragmentCompat را وقتی روی Preference تک‌ضرب زده می‌شود راه‌اندازی کنید، همان‌طور که در مثال زیر نشان داده شده است:

<Preference
        app:fragment="com.example.SyncFragment"
        .../>

وقتی کاربر روی Preference با Fragment مرتبط تک‌ضرب می‌زند، روش میانای PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() فراخوانده می‌شود. این روش جایی است که نمایش صفحه جدید را مدیریت می‌کنید و جایی است که صفحه در Activity اطراف پیاده‌سازی می‌شود.

پیاده‌سازی معمول شبیه به موارد زیر است:

کاتلین

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
    }
}

جاوا

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

اعلام سلسله‌مراتب تودرتو در همان منبع XML بااستفاده از &lt;PreferenceScreen&gt; تودرتو دیگر پشتیبانی نمی‌شود. به‌جای آن، از اشیای Fragment تودرتو استفاده کنید.

استفاده از «فعالیت‌های» جداگانه

یا اگر لازم است هر صفحه را به‌شدت سفارشی‌سازی کنید، یا اگر می‌خواهید انتقال‌های Activity کامل بین صفحه‌ها داشته باشید، می‌توانید از Activity جداگانه برای هر PreferenceFragmentCompat استفاده کنید. با انجام این کار، می‌توانید هر Activity و صفحه تنظیمات مربوط به آن را کاملاً سفارشی‌سازی کنید. برای اکثر برنامه‌ها، این گزینه را توصیه نمی‌کنیم؛ درعوض، از Fragments استفاده کنید که قبلاً توضیح داده شد.

برای اطلاعات بیشتر درباره راه‌اندازی Activity از Preference، به کنش‌های اولویت مراجعه کنید.