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