تنظیمات خود را سازماندهی کنید بخشی از 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>
نتیجه به شکل زیر است:
سلسله مراتب خود را به چندین صفحه تقسیم کنید
اگر تعداد زیادی اشیاء Preference
یا دستههای متمایز دارید، میتوانید آنها را در صفحههای جداگانه نمایش دهید. هر صفحه یک PreferenceFragmentCompat
با سلسله مراتب جداگانه خود است. سپس اشیاء Preference
در صفحه اولیه شما می توانند به صفحه های فرعی که حاوی تنظیمات برگزیده مرتبط هستند پیوند دهند.
شکل 2 یک سلسله مراتب ساده را نشان می دهد که شامل دو دسته است: پیام ها و همگام سازی .
شکل 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 با استفاده از <PreferenceScreen>
دیگر پشتیبانی نمی شود. به جای آن از اشیاء Fragment
تودرتو استفاده کنید.
از فعالیت های جداگانه استفاده کنید
از طرف دیگر، اگر میخواهید هر صفحه را به شدت سفارشی کنید، یا اگر میخواهید انتقال کامل Activity
بین صفحهها انجام شود، میتوانید از یک Activity
جداگانه برای هر PreferenceFragmentCompat
استفاده کنید. با انجام این کار، می توانید به طور کامل هر Activity
و صفحه تنظیمات مربوط به آن را شخصی سازی کنید. برای اکثر برنامه ها، ما این را توصیه نمی کنیم. در عوض، همانطور که قبلا توضیح داده شد، Fragments
استفاده کنید.
برای اطلاعات بیشتر در مورد راه اندازی یک Activity
از یک Preference
، به اقدامات ترجیحی مراجعه کنید.