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

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

دسته های ترجیحی

اگر چندین شیء Preference مرتبط در یک صفحه دارید، می توانید آنها را با استفاده از PreferenceCategory گروه بندی کنید. 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>

نتیجه به شکل زیر است:

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

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

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

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

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

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

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

برای پیوند دادن صفحه‌ها با یک 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 ، به اقدامات ترجیحی مراجعه کنید.