صفحههای تنظیمات بزرگ و پیچیده میتوانند پیدا کردن تنظیمات خاصی را که میخواهند تغییر دهند، برای کاربر مشکل کنند. کتابخانه Preference راه های زیر را برای سازماندهی بهتر صفحه تنظیمات شما ارائه می دهد.
دسته های ترجیحی
اگر چندین شیء Preference مرتبط در یک صفحه دارید، می توانید آنها را با استفاده از PreferenceCategory گروه بندی کنید. PreferenceCategory عنوان دسته را نمایش می دهد و به صورت بصری دسته را جدا می کند.
برای تعریف PreferenceCategory در XML، تگ های Preference را با PreferenceCategory بپیچید، به صورت زیر:
اگر تعداد زیادی اشیاء Preference یا دستههای متمایز دارید، میتوانید آنها را در صفحههای جداگانه نمایش دهید. هر صفحه یک PreferenceFragmentCompat با سلسله مراتب جداگانه خود است. سپس اشیاء Preference در صفحه اولیه شما می توانند به صفحه های فرعی که حاوی تنظیمات برگزیده مرتبط هستند پیوند دهند.
شکل 2 یک سلسله مراتب ساده را نشان می دهد که شامل دو دسته است: پیام ها و همگام سازی .
شکل 2. یک سلسله مراتب ساده با دو دسته.
شکل 3 همان مجموعه ترجیحات را نشان می دهد که به چندین صفحه تقسیم شده است:
شکل 3. یک سلسله مراتب به چندین صفحه تقسیم می شود.
برای پیوند دادن صفحهها با یک Preference ، میتوانید یک app:fragment در XML اعلام کنید یا میتوانید از Preference.setFragment() استفاده کنید. همانطور که در مثال زیر نشان داده شده است، نام بسته کامل PreferenceFragmentCompat را با ضربه زدن روی Preference اجرا کنید:
classMyActivity:AppCompatActivity(),PreferenceFragmentCompat.OnPreferenceStartFragmentCallback{...overridefunonPreferenceStartFragment(caller:PreferenceFragmentCompat,pref:Preference):Boolean{// Instantiate the new Fragment.valargs=pref.extrasvalfragment=supportFragmentManager.fragmentFactory.instantiate(classLoader,pref.fragment)fragment.arguments=argsfragment.setTargetFragment(caller,0)// Replace the existing Fragment with the new Fragment.supportFragmentManager.beginTransaction().replace(R.id.settings_container,fragment).addToBackStack(null).commit()returntrue}}
جاوا
publicclassMyActivityextendsAppCompatActivityimplementsPreferenceFragmentCompat.OnPreferenceStartFragmentCallback{...@OverridepublicbooleanonPreferenceStartFragment(PreferenceFragmentCompatcaller,Preferencepref){// Instantiate the new Fragment.finalBundleargs=pref.getExtras();finalFragmentfragment=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();returntrue;}}
PreferenceScreens
اعلام سلسله مراتب تودرتو در همان منبع XML با استفاده از <PreferenceScreen> دیگر پشتیبانی نمی شود. به جای آن از اشیاء Fragment تودرتو استفاده کنید.
از فعالیت های جداگانه استفاده کنید
از طرف دیگر، اگر میخواهید هر صفحه را به شدت سفارشی کنید، یا اگر میخواهید انتقال کامل Activity بین صفحهها انجام شود، میتوانید از یک Activity جداگانه برای هر PreferenceFragmentCompat استفاده کنید. با انجام این کار، می توانید به طور کامل هر Activity و صفحه تنظیمات مربوط به آن را شخصی سازی کنید. برای اکثر برنامه ها، ما این را توصیه نمی کنیم. در عوض، همانطور که قبلا توضیح داده شد، Fragments استفاده کنید.
برای اطلاعات بیشتر در مورد راه اندازی یک Activity از یک Preference ، به اقدامات ترجیحی مراجعه کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Organize your settings\nPart of [Android Jetpack](/jetpack).\n===========================================================\n\nLarge and complex settings screens can make it difficult for a user to find a\nspecific setting they want to change. The Preference library offers the\nfollowing ways to better organize your settings screens.\n\nPreference categories\n---------------------\n\nIf you have several related\n[`Preference`](/jetpack/androidx/releases/preference) objects on a single\nscreen, you can group them using a\n[`PreferenceCategory`](/reference/androidx/preference/PreferenceCategory). A\n`PreferenceCategory` displays a category title and visually separates the\ncategory.\n\nTo define a `PreferenceCategory` in XML, wrap the `Preference` tags with a\n`PreferenceCategory`, as follows: \n\n```xml\n\u003cPreferenceScreen\n xmlns:app=\"http://schemas.android.com/apk/res-auto\"\u003e\n\n \u003cPreferenceCategory\n app:key=\"notifications_category\"\n app:title=\"Notifications\"\u003e\n\n \u003cSwitchPreferenceCompat\n app:key=\"notifications\"\n app:title=\"Enable message notifications\"/\u003e\n\n \u003c/PreferenceCategory\u003e\n\n \u003cPreferenceCategory\n app:key=\"help_category\"\n app:title=\"Help\"\u003e\n\n \u003cPreference\n app:key=\"feedback\"\n app:summary=\"Report technical issues or suggest new features\"\n app:title=\"Send feedback\"/\u003e\n\n \u003c/PreferenceCategory\u003e\n\n\u003c/PreferenceScreen\u003e\n```\n\nThe result looks like the following:\n**Figure 1.** Preferences within categories.\n\nSplit your hierarchy into multiple screens\n------------------------------------------\n\nIf you have a large number of `Preference` objects or distinct categories, you\ncan display them on separate screens. Each screen is a\n`PreferenceFragmentCompat` with its own separate hierarchy. `Preference` objects\non your initial screen can then link to subscreens that contain related\npreferences.\n\nFigure 2 shows a simple hierarchy that contains two categories: **Messages** and\n**Sync**.\n**Figure 2.** A simple hierarchy with two categories.\n\nFigure 3 shows the same set of preferences split into multiple screens:\n**Figure 3.** A hierarchy split into multiple screens.\n\nTo link screens with a `Preference`, you can declare an `app:fragment` in XML or\nyou can use\n[`Preference.setFragment()`](/reference/androidx/preference/Preference#setFragment(java.lang.String)).\nLaunch the full package name of the `PreferenceFragmentCompat` when\nthe `Preference` is tapped, as shown in the following example: \n\n```xml\n\u003cPreference\n app:fragment=\"com.example.SyncFragment\"\n .../\u003e\n```\n\nWhen a user taps a `Preference` with an associated `Fragment`, the interface\nmethod\n[`PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()`](/reference/androidx/preference/PreferenceFragmentCompat.OnPreferenceStartFragmentCallback#onPreferenceStartFragment(androidx.preference.PreferenceFragmentCompat,%20androidx.preference.Preference))\nis called. This method is where you handle displaying the new screen and where\nthe screen is implemented in the surrounding `Activity`.\n| **Note:** if you don't implement `onPreferenceStartFragment()`, a fallback implementation is used instead. While this works in most cases, we strongly recommend implementing this method so you can fully configure transitions between `Fragment` objects and update the title displayed in your `Activity` toolbar, if applicable.\n\nA typical implementation looks similar to the following: \n\n### Kotlin\n\n```kotlin\nclass MyActivity : AppCompatActivity(),\n PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {\n ...\n override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {\n // Instantiate the new Fragment.\n val args = pref.extras\n val fragment = supportFragmentManager.fragmentFactory.instantiate(\n classLoader,\n pref.fragment)\n fragment.arguments = args\n fragment.setTargetFragment(caller, 0)\n // Replace the existing Fragment with the new Fragment.\n supportFragmentManager.beginTransaction()\n .replace(R.id.settings_container, fragment)\n .addToBackStack(null)\n .commit()\n return true\n }\n}\n```\n\n### Java\n\n```java\npublic class MyActivity extends AppCompatActivity implements\n PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {\n ...\n @Override\n public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {\n // Instantiate the new Fragment.\n final Bundle args = pref.getExtras();\n final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate(\n getClassLoader(),\n pref.getFragment());\n fragment.setArguments(args);\n fragment.setTargetFragment(caller, 0);\n // Replace the existing Fragment with the new Fragment.\n getSupportFragmentManager().beginTransaction()\n .replace(R.id.settings_container, fragment)\n .addToBackStack(null)\n .commit();\n return true;\n }\n}\n```\n\n### PreferenceScreens\n\nDeclaring nested hierarchies within the same XML resource using a nested\n`<PreferenceScreen>` is no longer supported. Use nested `Fragment` objects\ninstead.\n\n### Use separate Activities\n\nAlternatively, if you need to heavily customize each screen, or if you want full\n`Activity` transitions between screens, you can use a separate `Activity` for\neach `PreferenceFragmentCompat`. By doing this, you can fully customize each\n`Activity` and its corresponding settings screen. For most apps, we don't\nrecommended this; instead, use `Fragments` as previously described.\n\nFor more information about launching an `Activity` from a `Preference`, see\n[Preference actions](/guide/topics/ui/settings/customize-your-settings#actions)."]]