PreferenceFragment去完成设置页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PreferenceFragment去完成设置页面相关的知识,希望对你有一定的参考价值。
参考技术A大多数时候我们都是这样去使用SharedPreferences
在app设置页面的开发中也会用到对设置项的保存,我们也会用到SharedPreferences去保存这些设置项,android官方提供了更为简单针对设置页面使用SharedPreferences方法,那就是PreferenceActivity和PreferenceFragment. 下面来说下如何使用.
PreferenceActivity主要针对3.0以前的版本,PreferenceFragment则更为灵活,其实使用方法上面两者大致一样,所以PreferenceActivity就不展开讲解,直接来看PreferenceFragment的使用
一般来说Fragment会要求去关联一个布局的layout, 但是在PreferenceFragment则不需要这样做,我们需要去自定义一个xml加入首选项(首选项就是配置项,官方称为首选项). xml根节点必须是一个PreferenceScreen元素. PreferenceScreen里面的子项都作为一个独立的控件显示在界面里,同时还具备保存属性.
显示效果如下
以上只展示了CheckBoxPreference和ListPreference,还有其它很多Preference控件,具体可以查阅官方文档有关Preference的字类.
如果设置项目过多,我们可以进行分类展示,有如下两种方式可以来实现.
加入PreferenceCategory的属性可以进行标题的划分.
使用PreferenceCategory属性可以划分子屏幕
有时候我们的设置项目并不是保存一个配置项,而是去跳转到一个新的画面. 我们可以使用如下配置来使得首选项跳转一个网页
当然你也可以配置显式的intent进行跳转,具体可以参见官方文档.
可以设置默认值给Preference控件
在进入设置页面可以调用
对默认值进行初始化应用, 这个接口最常用的地方就是去恢复设置.
通常还有种需求是点击一个首选项跳转到另外一个屏幕,当然这个功能也可以通过PreferenceScreen来完成,但是使用PreferenceScreen不能兼容平板的情况就像下面这样
如果要实现这种效果就要使用到hearders
android:fragment用来标记点击后跳转的Fragment,extra用来传递参数,可以在Fragment中通过getArguments()来获取传递过来的bundle数据, 这个数据最大的作用就是用来在同一个preference fragment中加载不同的preference xml.
如果要显示这个标头文件的内容需要去重写onBuildHeaders方法.
preference-headers这个标签只能支持3.0以后的版本,如果要兼容3.0以前的版本需要另外在写个xml作为兼容
再以如下方式加载
onBuildHeaders这个回调只会在Build.VERSION_CODES.HONEYCOMB(3.0系统)以上的版本调用。
另外我们必须要注意的一点,目前首选项不会再您调用registerOnSharedPreferenceChangeListener()时存储对监听器的强引用。但是,您必须存储对监听器的强引用,否则它将很容易被当作垃圾回收。
上面就是关于如何使用系统提供具有Preference功能的UI控件来打造一个设置界面. 更多详细关于自定义Preference等可以参考官方文档 https://developer.android.com/guide/topics/ui/settings
PreferenceFragment的使用
参考技术A 最近项目开发中使用到了PreferenceFragment来做一个设置页面的功能,所以就写一个小例子记录一下使用过程。首先fragment继承于PreferenceFragment,使用addPreferencesFromResource添加布局。
在xml文件中添加控件,比如CheckBoxPreference、SwitchPreference、Preference等。
然后在fragment中通过findPreference找控件,可用onPreferenceChangeListener设置监听事件。
以上是关于PreferenceFragment去完成设置页面的主要内容,如果未能解决你的问题,请参考以下文章
我们如何使用 espresso 来测试带有 PreferenceFragment 的 android 设置活动?
设置 Android PreferenceFragment 的正确方法是啥?
如何将 PreferenceFragment 与 ViewPager 一起使用?