تنظیمات بخشی از Android Jetpack.
تنظیمات به کاربران اجازه میدهد عملکرد و رفتار برنامه را تغییر دهند. تنظیمات میتواند بر رفتار پسزمینه تأثیر بگذارد، مثلاً اینکه برنامه چندوقت یکبار دادهها را با ابر همگامسازی کند، یا میتواند تأثیر گستردهتری داشته باشد، مثلاً تغییر محتوا و ارائه میانای کاربر.
برای ادغام تنظیمات قابلپیکربندی کاربر در برنامهتان، از کتابخانه AndroidX Preference استفاده کنید. این کتابخانه میانای کاربر را مدیریت میکند و با فضای ذخیرهسازی تعامل دارد تا شما فقط تنظیمات فردی را که کاربر میتواند پیکربندی کند تعریف کنید. این کتابخانه با یک زمینه «طراحی مواد» ارائه میشود که تجربه کاربری ثابتی را در دستگاهها و نسخههای سیستمعامل مختلف فراهم میکند.
شروع کنید
Preference واحد سازنده پایه
کتابخانه Preference است. صفحه تنظیمات حاوی Preference
سلسلهمراتب است. میتوانید این سلسلهمراتب را بهعنوان منبع XML تعریف کنید، یا میتوانید سلسلهمراتبی
در کد بسازید.
بخشهای زیر نحوه ساختن صفحه تنظیمات ساده را بااستفاده از کتابخانه اولویت AndroidX شرح میدهد.
قبلاز شروع، وابستگی کتابخانه «اولویت» را به فایل build.gradle
خود اضافه کنید:
شیک
dependencies { implementation "androidx.preference:preference-ktx:1.2.0" }
کاتلین
dependencies { implementation("androidx.preference:preference-ktx:1.2.0") }
پساز «همگامسازی Gradle»، میتوانید به بخش XML تکلیف بروید.
ایجاد سلسله مراتب
در پروژه خود، به پوشه res/xml بروید، فایل preferences.xml را ایجاد کنید،
و کد زیر را به آن اضافه کنید:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features"/> </PreferenceScreen>
این سلسلهمراتب شامل دو شیء Preference است: SwitchPreferenceCompat
که به کاربران اجازه میدهد تنظیمات را روشن و خاموش کنند، و یک Preference پایه بدون
ابزاره.
هنگام ساختن سلسلهمراتب، هر Preference باید کلید یکتایی داشته باشد.
گسترش سلسلهمراتب
برای گسترش سلسلهمراتب از یک ویژگی XML، یک
PreferenceFragmentCompat ایجاد کنید،
onCreatePreferences() را لغو کنید،
و منبع XML را برای گسترش ارائه دهید، همانطور که در مثال زیر نشان داده شده است:
کاتلین
class MySettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } }
جاوا
public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); } }
سپس میتوانید این Fragment را به Activity خود اضافه کنید، درست مانند هر Fragment دیگری:
کاتلین
class MySettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportFragmentManager .beginTransaction() .replace(R.id.settings_container, MySettingsFragment()) .commit() } }
جاوا
public class MySettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(R.id.settings_container, new MySettingsFragment()) .commit(); } }
نتیجه در تصویر زیر نشان داده شده است:
Preference
ایجاد شده است.
پایش اولویتها
با ثبت شنونده برای اولویت، میتوانید هنگام تغییر اولویت رویدادی دریافت کنید:
کاتلین
findPreference<SwitchPreferenceCompat>("notifications") ?.setOnPreferenceChangeListener { _, newValue -> Log.d("Preferences", "Notifications enabled: $newValue") true // Return true if the event is handled. } findPreference<Preference>("feedback") ?.setOnPreferenceClickListener { Log.d("Preferences", "Feedback was clicked") true // Return true if the click is handled. }
جاوا
SwitchPreferenceCompat notificationsPref = findPreference("notifications"); if (notificationsPref != null) { notificationsPref.setOnPreferenceChangeListener((preference, newValue) -> { Log.d("Preferences", String.format("Notifications enabled: %s", newValue)); return true; // Return true if the event is handled. }); } Preference feedbackPref = findPreference("feedback"); if (feedbackPref != null) { feedbackPref.setOnPreferenceClickListener((preference) -> { Log.d("Preferences", "Feedback was clicked"); return true; // Return true if the event is handled. }); }
خواندن مقدار اولویت فعلی
PreferenceFragmentCompat بیشتر سازوکار مربوط به ذخیره و
خواندن اولویتها را پنهان میکند. بااینحال، همه چیز بااستفاده از
SharedPreferences ذخیره میشود و میتوانید این مقادیر را همانطور که معمولاً با
SharedPreferences انجام میدهید بخوانید:
کاتلین
val preferences = PreferenceManager.getDefaultSharedPreferences(this).all preferences.forEach { Log.d("Preferences", "${it.key} -> ${it.value}") }
جاوا
var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll(); preferences.forEach((key, value) ->{ Log.d("Preferences", String.format("%s -> %s", key, value)); });
قطعه کد قبلی نمونهای از SharedPreferences پیشفرض را برای برنامه دریافت میکند، به همه مقادیر ذخیرهشده دسترسی پیدا میکند، آنها را تکرار میکند، و آنها را در Logcat چاپ میکند.