Android Jetpack 的「設定」部分

使用者可使用「設定」變更應用程式的功能和行為。設定會影響背景行為,例如應用程式與雲端同步資料的頻率,甚至可能影響更大的範圍,例如變更使用者介面的內容和顯示。

建議您使用 AndroidX Preference Library,將使用者可配置的設定整合至您的應用程式。這個程式庫會管理使用者介面並與儲存空間互動,因此您只能定義使用者可配置的個別設定。這個程式庫提供質感主題,可以為各種裝置和 OS 版本提供一致的使用者體驗。

開始使用

Preference 是 Preference Library 的基本建構區塊。設定畫面包含 Preference 階層。您可以將這個階層定義為 XML 資源,或是在程式碼中建構階層

以下各節說明如何使用 AndroidX Preference Library 建立簡易的設定畫面。

建立階層

以下範例是一個透過 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>

這個階層包含兩個個別 Preferences:允許使用者開啟或關閉設定的 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();
    }
}