การตั้งค่า เป็นส่วนหนึ่งของ Android Jetpack

การตั้งค่าช่วยให้ผู้ใช้เปลี่ยนฟังก์ชันและลักษณะการทำงานของแอปได้ การตั้งค่าสามารถ ส่งผลต่อลักษณะการทำงานในเบื้องหลัง เช่น ความถี่ที่แอปซิงค์ข้อมูลกับ ระบบคลาวด์ หรือเข้าถึงผู้ชมได้กว้างขึ้น เช่น เปลี่ยนเนื้อหาและ จากอินเทอร์เฟซผู้ใช้

ในการผสานรวมการตั้งค่าที่ผู้ใช้กำหนดค่าได้ลงในแอปของคุณ ให้ใช้ AndroidX ไลบรารีค่ากำหนด ไลบรารีนี้จัดการอินเทอร์เฟซผู้ใช้และโต้ตอบกับ เพื่อให้คุณกำหนดเฉพาะการตั้งค่าแต่ละรายการที่ผู้ใช้สามารถ กำหนดค่า ไลบรารีนี้มาพร้อมกับธีมดีไซน์ Material ที่ให้ ผู้ใช้ได้รับประสบการณ์ที่สอดคล้องกันทั้งในอุปกรณ์และระบบปฏิบัติการเวอร์ชันต่างๆ

เริ่มต้นใช้งาน

Preference คืออาคารพื้นฐาน ของไลบรารีค่ากำหนด หน้าจอการตั้งค่ามีPreference ลำดับชั้น คุณสามารถกำหนดลำดับชั้นนี้เป็นทรัพยากร XML หรือคุณสามารถสร้าง ลำดับชั้นในโค้ด

ส่วนต่อไปนี้จะอธิบายวิธีสร้างหน้าจอการตั้งค่าอย่างง่ายโดยใช้ ไลบรารีค่ากำหนด AndroidX

ก่อนเริ่มต้น ให้เพิ่มทรัพยากร Dependency ของไลบรารีค่ากำหนดลงใน build.gradle ไฟล์:

ดึงดูด

dependencies {     implementation "androidx.preference:preference-ktx:1.2.0" }

Kotlin

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 2 รายการ ได้แก่ SwitchPreferenceCompat ที่ช่วยให้ผู้ใช้เปิดหรือปิดการตั้งค่าได้ รวมถึงPreferenceพื้นฐานที่ไม่มี วิดเจ็ต

เมื่อสร้างลำดับชั้น Preference แต่ละรายการต้องมีคีย์ที่ไม่ซ้ำกัน

เพิ่มลำดับชั้น

หากต้องการเพิ่มลำดับชั้นจากแอตทริบิวต์ XML ให้สร้าง PreferenceFragmentCompat ลบล้าง onCreatePreferences(), และระบุทรัพยากร XML เพื่อทำให้สูงเกินจริง ดังที่ปรากฏในตัวอย่างต่อไปนี้:

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);     } }

จากนั้นคุณสามารถเพิ่ม Fragment นี้ลงใน Activity ของคุณได้เช่นเดียวกับที่ใช้เพิ่ม Fragment:

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();     } }

ผลลัพธ์จะแสดงในรูปภาพต่อไปนี้

วันที่ รูปภาพแสดงตัวอย่างหน้าจอค่ากำหนด
รูปที่ 1 หน้าจอการตั้งค่าที่สร้างขึ้นโดยใช้ Preference 2 เครื่อง ออบเจ็กต์

ตรวจสอบค่ากำหนด

คุณสามารถรับเหตุการณ์เมื่อค่ากำหนดเปลี่ยนแปลงโดยการลงทะเบียน Listener สำหรับ ดังนี้

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.     }); }

อ่านค่าค่ากำหนดปัจจุบัน

PreferenceFragmentCompat ซ่อนเครื่องจักรส่วนใหญ่ที่เกี่ยวข้องกับการบันทึกและ การอ่านค่ากำหนด อย่างไรก็ตาม ทุกอย่างจะได้รับการจัดเก็บไว้โดยใช้ SharedPreferences และคุณสามารถอ่านค่าเหล่านี้ได้ตามปกติกับ 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)); });

ข้อมูลโค้ดก่อนหน้าได้รับอินสแตนซ์ของ SharedPreferences เริ่มต้นสำหรับ เข้าถึงค่าที่จัดเก็บไว้ทั้งหมด วนซ้ำ และพิมพ์ค่าใน Logcat