1、介绍
PreferenceActivity 是一个抽象类,继承自ListActivity ,该类封装了SharedPreferences.
PreferenceActivity 提供了一些常用的设置项如,与普通组件一样,这些配置项既可以从XML文件创建,也可以从代码创建.
每一个设置项标签有一个android:key属性,该属性的值就是保存在XML文件中的key-value对中的key.
当PreferenceActivity中的内容改变时,Android系统会自动进行保存和持久化维护,我们只需要在要用的设置界面中数据的地方进行读取就可以了.
2、代码
<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>
public class MySettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
public class MySettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings_container, new MySettingsFragment())
.commit();
}
}
示意图
3、监控偏好设置
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.
});
}
4、读取当前的偏好设置值
var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll();
preferences.forEach((key, value) ->{
Log.d("Preferences", String.format("%s -> %s", key, value));
});
5、其他
- PreferenceActivity 类有一个addPreferencesFromResource() 方法,它用于将xml 资源显示到界面, 这里指的xml 就是 preference_setting.xml 写法
对于PreferenceScreen 其中3个属性:key、title、summary, key类似于android:id, title 是屏幕的标题, summary 是屏幕用途的描述. - 在PreferenceScreen 下可以存在 CheckBoxPreference、ListPreference 等首选项的子类,它们继承于android.preference.Preference 父类
如图所示
以 ListPrefernce 为例,说明一些特性
特 性/说 明
______________________________________________________________________android:key /选项的名称或键
android:title /选项的标题
android:summary /选项的简短摘要
android:entries /列表项的文本
android:entryValues /列表项的值,上一个 文本相当于键
android:dialogTitle /对话框的标题, 在视图显示为对话框时使用
android:defaultValue /列表项中选项的默认值