当前位置:   article > 正文

Android PreferenceActivity可以自动设置的Activity

Android PreferenceActivity可以自动设置的Activity

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
public class MySettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
public class MySettingsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.settings_container, new MySettingsFragment())
                .commit();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

示意图
在这里插入图片描述

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.
    });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

4、读取当前的偏好设置值

var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll();
	preferences.forEach((key, value) ->{
    Log.d("Preferences", String.format("%s -> %s", key, value));
});
  • 1
  • 2
  • 3
  • 4

5、其他

  1. PreferenceActivity 类有一个addPreferencesFromResource() 方法,它用于将xml 资源显示到界面, 这里指的xml 就是 preference_setting.xml 写法
    对于PreferenceScreen 其中3个属性:key、title、summary, key类似于android:id, title 是屏幕的标题, summary 是屏幕用途的描述.
  2. 在PreferenceScreen 下可以存在 CheckBoxPreference、ListPreference 等首选项的子类,它们继承于android.preference.Preference 父类
    如图所示

在这里插入图片描述
以 ListPrefernce 为例,说明一些特性

特 性/说 明
______________________________________________________________________android:key /选项的名称或键
android:title /选项的标题
android:summary /选项的简短摘要
android:entries /列表项的文本
android:entryValues /列表项的值,上一个 文本相当于键
android:dialogTitle /对话框的标题, 在视图显示为对话框时使用
android:defaultValue /列表项中选项的默认值

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/592416
推荐阅读
相关标签
  

闽ICP备14008679号