จัดระเบียบการตั้งค่า เป็นส่วนหนึ่งของ Android Jetpack

หน้าจอการตั้งค่าขนาดใหญ่และซับซ้อนอาจทำให้ผู้ใช้ค้นหา การตั้งค่าเฉพาะที่ต้องการเปลี่ยนแปลง ไลบรารีค่ากำหนดมีฟังก์ชัน ต่อไปนี้เพื่อจัดระเบียบหน้าจอการตั้งค่าของคุณ

หมวดหมู่ค่ากำหนด

หากคุณมีผลิตภัณฑ์ที่เกี่ยวข้องหลายรายการ Preference วัตถุในหนึ่งไฟล์ คุณสามารถจัดกลุ่มได้โดยใช้ PreferenceCategoryPreferenceCategory จะแสดงชื่อหมวดหมู่และแยก หมวดหมู่

หากต้องการกำหนด 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>

ผลลัพธ์จะมีลักษณะดังต่อไปนี้

วันที่ รูปภาพแสดงค่ากำหนดพร้อมหมวดหมู่
รูปที่ 1 ค่ากำหนดภายในหมวดหมู่

แบ่งลำดับชั้นออกเป็นหลายหน้าจอ

หากคุณมีออบเจ็กต์ Preference จำนวนมากหรือหมวดหมู่ที่แตกต่างกัน คุณ แสดงบนหน้าจอแยกกันได้ แต่ละหน้าจอ PreferenceFragmentCompat มีลําดับชั้นแยกต่างหาก ออบเจ็กต์ Preference รายการ ในหน้าจอเริ่มต้น จะสามารถลิงก์ไปยังหน้าจอย่อยที่มี การตั้งค่าเริ่มต้น

รูปที่ 2 แสดงลำดับชั้นแบบง่ายที่ประกอบด้วย 2 หมวดหมู่ ได้แก่ ข้อความ และ ซิงค์

วันที่ รูปภาพแสดงหน้าจอค่ากำหนดแบบลำดับชั้น
รูปที่ 2 ลำดับชั้นอย่างง่ายที่มี 2 หมวดหมู่

รูปที่ 3 แสดงค่ากำหนดชุดเดียวกันที่แบ่งออกเป็นหลายหน้าจอ

วันที่ รูปภาพแสดงลำดับชั้นที่แบ่งออกเป็นหลายหน้าจอ
รูปที่ 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 เดียวกันโดยใช้กลุ่มที่ซ้อนกัน ไม่รองรับ &lt;PreferenceScreen&gt; แล้ว ใช้ออบเจ็กต์ Fragment ที่ฝังไว้ แทน

ใช้กิจกรรมแยกต่างหาก

หรือหากคุณต้องการกำหนดค่าแต่ละหน้าจออย่างละเอียด หรือหากต้องการ Activity การเปลี่ยนไปมาระหว่างหน้าจอ คุณสามารถใช้ Activity แยกต่างหากสำหรับ ทุกๆ PreferenceFragmentCompat ด้วยวิธีนี้ คุณจะสามารถกำหนดค่า Activity และหน้าจอการตั้งค่าที่เกี่ยวข้อง สำหรับแอปส่วนใหญ่ เราจะไม่ แนะนำ ให้ใช้ Fragments ตามที่อธิบายไว้ก่อนหน้านี้แทน

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดตัว Activity จาก Preference ได้ที่ การดำเนินการที่ต้องการ