设置 Android Jetpack 的一部分。
设置可让用户更改应用的功能和行为。“设置”可以 影响后台行为,例如应用程序与 也可以是影响更广泛的应用,例如更改内容和 界面的呈现方式
如需将用户可配置的设置集成到您的应用中,请使用 AndroidX Preference 库。此库管理界面,并与 存储空间,这样您就可以只定义用户可以 配置。该库附带 Material Design 主题,可提供 在不同设备和操作系统版本之间提供一致的用户体验。
开始使用
Preference
是基础构建,
“偏好设置”代码块的界面中设置屏幕包含一个 Preference
层次结构。您可以将此层次结构定义为 XML 资源,也可以构建
代码层次结构。
以下各部分介绍了如何使用 AndroidX Preference 库。
在开始之前,请将 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。