จัดระเบียบการตั้งค่า เป็นส่วนหนึ่งของ Android Jetpack
หน้าจอการตั้งค่าขนาดใหญ่และซับซ้อนอาจทำให้ผู้ใช้ค้นหา การตั้งค่าเฉพาะที่ต้องการเปลี่ยนแปลง ไลบรารีค่ากำหนดมีฟังก์ชัน ต่อไปนี้เพื่อจัดระเบียบหน้าจอการตั้งค่าของคุณ
หมวดหมู่ค่ากำหนด
หากคุณมีผลิตภัณฑ์ที่เกี่ยวข้องหลายรายการ
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 แสดงลำดับชั้นแบบง่ายที่ประกอบด้วย 2 หมวดหมู่ ได้แก่ ข้อความ และ ซิงค์
รูปที่ 3 แสดงค่ากำหนดชุดเดียวกันที่แบ่งออกเป็นหลายหน้าจอ
หากต้องการลิงก์หน้าจอกับ Preference
คุณสามารถประกาศ app:fragment
ใน XML หรือ
ที่คุณสามารถใช้ได้
Preference.setFragment()
เปิดชื่อแพ็กเกจแบบเต็มของ PreferenceFragmentCompat
เมื่อ
มีการแตะ Preference
ดังที่แสดงในตัวอย่างต่อไปนี้
<Preference app:fragment="com.example.SyncFragment" .../>
เมื่อผู้ใช้แตะ Preference
ที่มี Fragment
ที่เชื่อมโยง อินเทอร์เฟซ
วิธีการ
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
จะถูกเรียก นี่เป็นที่ที่คุณใช้จัดการการแสดงหน้าจอใหม่และตำแหน่ง
ติดตั้งหน้าจอในบริเวณ Activity
โดยรอบ
การติดตั้งใช้งานโดยทั่วไปมีลักษณะคล้ายกับด้านล่างนี้
Kotlin
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 } }
Java
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; } }
PreferenceScreen
การประกาศลำดับชั้นที่ซ้อนกันภายในทรัพยากร XML เดียวกันโดยใช้กลุ่มที่ซ้อนกัน
ไม่รองรับ <PreferenceScreen>
แล้ว ใช้ออบเจ็กต์ Fragment
ที่ฝังไว้
แทน
ใช้กิจกรรมแยกต่างหาก
หรือหากคุณต้องการกำหนดค่าแต่ละหน้าจออย่างละเอียด หรือหากต้องการ
Activity
การเปลี่ยนไปมาระหว่างหน้าจอ คุณสามารถใช้ Activity
แยกต่างหากสำหรับ
ทุกๆ PreferenceFragmentCompat
ด้วยวิธีนี้ คุณจะสามารถกำหนดค่า
Activity
และหน้าจอการตั้งค่าที่เกี่ยวข้อง สำหรับแอปส่วนใหญ่ เราจะไม่
แนะนำ ให้ใช้ Fragments
ตามที่อธิบายไว้ก่อนหน้านี้แทน
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดตัว Activity
จาก Preference
ได้ที่
การดำเนินการที่ต้องการ