Cài đặt Một phần của Android Jetpack.
Chế độ cài đặt cho phép người dùng thay đổi chức năng và hành vi của ứng dụng. Chế độ cài đặt có thể ảnh hưởng đến hoạt động ở chế độ nền, chẳng hạn như tần suất ứng dụng đồng bộ hoá dữ liệu với đám mây, hoặc có thể mở rộng phạm vi tiếp cận, chẳng hạn như thay đổi nội dung và cách trình bày giao diện người dùng.
Để tích hợp các chế độ cài đặt mà người dùng có thể định cấu hình vào ứng dụng, hãy sử dụng Thư viện lựa chọn ưu tiên AndroidX. Thư viện này quản lý giao diện người dùng và tương tác với bộ nhớ để bạn chỉ xác định những chế độ cài đặt riêng lẻ mà người dùng có thể định cấu hình. Thư viện này có một giao diện Material Design, mang lại trải nghiệm nhất quán cho người dùng trên các thiết bị và phiên bản hệ điều hành.
Bắt đầu
Preference
là thành phần cơ bản của Thư viện lựa chọn ưu tiên. Màn hình cài đặt chứa một Preference
hệ phân cấp. Bạn có thể xác định hệ phân cấp này dưới dạng một tài nguyên XML hoặc có thể tạo hệ phân cấp bằng mã.
Các phần sau mô tả cách xây dựng một màn hình cài đặt đơn giản bằng cách sử dụng Thư viện lựa chọn ưu tiên AndroidX.
Trước khi bắt đầu, hãy thêm phần phụ thuộc Thư viện lựa chọn ưu tiên vào tệp build.gradle
:
Groovy
dependencies { implementation "androidx.preference:preference-ktx:1.2.0" }
Kotlin
dependencies { implementation("androidx.preference:preference-ktx:1.2.0") }
Sau khi đồng bộ hoá Gradle, bạn có thể chuyển sang phần XML của tác vụ.
Tạo hệ phân cấp
Trong dự án của bạn, hãy chuyển đến thư mục res/xml
, tạo tệp preferences.xml
rồi thêm mã sau vào tệp đó:
<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>
Hệ phân cấp này chứa hai đối tượng Preference
: một SwitchPreferenceCompat
cho phép người dùng bật và tắt một chế độ cài đặt, và một Preference
cơ bản không có tiện ích.
Khi xây dựng hệ phân cấp, mỗi Preference
phải có một khoá duy nhất.
Tăng cường hệ phân cấp
Để tăng cường hệ phân cấp từ một thuộc tính XML, hãy tạo một PreferenceFragmentCompat
, ghi đè onCreatePreferences()
và cung cấp tài nguyên XML để tăng cường, như trong ví dụ sau:
Kotlin
class MySettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } }
Java
public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); } }
Sau đó, bạn có thể thêm Fragment
này vào Activity
giống như với mọi Fragment
khác:
Kotlin
class MySettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportFragmentManager .beginTransaction() .replace(R.id.settings_container, MySettingsFragment()) .commit() } }
Java
public class MySettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(R.id.settings_container, new MySettingsFragment()) .commit(); } }
Kết quả được thể hiện trong hình sau:
Giám sát các lựa chọn ưu tiên
Bạn có thể nhận được một sự kiện khi một lựa chọn ưu tiên thay đổi bằng cách đăng ký trình nghe cho sự kiện đó:
Kotlin
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. }
Java
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. }); }
Đọc giá trị lựa chọn ưu tiên hiện tại
PreferenceFragmentCompat
ẩn nhiều máy móc liên quan đến việc lưu và đọc các lựa chọn ưu tiên. Tuy nhiên, mọi thứ được lưu trữ bằng SharedPreferences
và bạn có thể đọc các giá trị này như bình thường với SharedPreferences
:
Kotlin
val preferences = PreferenceManager.getDefaultSharedPreferences(this).all preferences.forEach { Log.d("Preferences", "${it.key} -> ${it.value}") }
Java
var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll(); preferences.forEach((key, value) ->{ Log.d("Preferences", String.format("%s -> %s", key, value)); });
Đoạn mã trước lấy một thực thể của SharedPreferences
mặc định cho ứng dụng, truy cập vào tất cả các giá trị được lưu trữ, lặp lại và in các giá trị đó trong Logcat.