設定 Android Jetpack 的一部分。
使用者可透過設定變更應用程式的功能和行為。設定 會影響背景行為,例如應用程式與 也可以擴大觸及範圍,例如變更內容和 使用者介面的呈現方式
如要將使用者配置的設定整合至您的應用程式,請使用 AndroidX Preference 程式庫。這個程式庫會管理使用者介面,並與 Storage 可讓您只定義使用者 設定。這個程式庫提供 Material Design 主題, 在不同裝置和 OS 版本上提供一致的使用者體驗
開始使用
Preference
是基本建構
偏好設定程式庫區塊設定畫麵包含Preference
「階層」。您可以將此階層定義為 XML 資源,或是建立
程式碼中的階層結構
以下各節將說明如何使用 AndroidX Preference Library。
開始設定前,請將 Preference 程式庫依附元件新增至 build.gradle
檔案:
Groovy
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
物件:
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(); } }
結果如下圖所示:
監控偏好設定
您可以在偏好設定變更時取得事件,方法是為 它:
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。