API Demos(4) Preference,偏好设置

本文详细介绍了Android中Preference的使用方法,包括PreferenceActivity和PreferenceFragment的引入方式,Preference XML配置文件的节点形式及样式,以及Preference如何与SharedPreferences交互来保存用户设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近编辑于2018年4月30日

一、引入Preference的方式

1、Preference有两种界面展现形式:PreferenceActivity和PreferenceFragment。

2、可以在PreferenceActivity或PreferenceFragment中以两种方式引入Preference:

i、addPreferencesFromResource(R.xml.preference_xxx);其中preference_xxx是res下xml文件夹下的一种特定格式的XML文件;

ii、setPreferenceScreen(preferenceScreen);详情可以参见API Demos中PreferencesFromCode类,可以对比下面说到的PreferenceScreen的XML文件。

二、引用的XML的节点形式

1、根结点必须是PreferenceScreen,而PreferenceScreen也可以作为子节点的一般父节点,还可以设置android:fragment属性引入fragment(该fragment可以再展示Preference);

2、PreferenceCategory也可以作为父节点,同时其有一个android:title属性;

3、子节点通常有CheckBoxPreference、SwitchPreference、EditTextPreference、ListPreference、自定义Preference。

三、节点的样式

1、PreferenceScreen就是一个空的容器;

2、PreferenceCategory是一个附带标题(TextView,默认颜色colorAccent)的容器,即使不设置android:title属性也会留出标题的空间;

3、CheckBoxPreference左上一个标题(android:title属性,TextView,默认颜色深黑色),左下一个描述(android:summary属性,TextView,默认颜色浅灰色),右边一个CheckBox控件。

4、SwitchPreference左上一个标题(android:title属性,TextView,默认颜色深黑色),左下一个描述(android:summary属性,TextView,默认颜色浅灰色),右边一个Switch控件。

5、EditTextPreference是一个DialogPreference,除了左上一个标题(android:title属性,TextView,默认颜色深黑色),左下一个描述(android:summary属性,TextView,默认颜色浅灰色),点击它时还会弹起一个dialog,这个dialog有一个标题(android:dialogTitle属性)一个EditText还有取消按钮确定按钮。

6、ListPreference也是一个DialogPreference,除了左上一个标题(android:title属性,TextView,默认颜色深黑色),左下一个描述(android:summary属性,TextView,默认颜色浅灰色),点击它时还会弹起一个dialog,这个dialog有一个标题(android:dialogTitle属性),还有一个单选列表(android:entries属性表示每个选项展示的文字,android:entryValues属性表示每个选项存储的值)。

四、Preference的作用

用户操作这些控件时实际上就是操作SharePreference,会将android:key属性的值作为key存储一些值。CheckBoxPreference和SwitchPreference都继承自TwoStatePreference,在setChecked时会调用父类的persistBoolean方法,而在persistBoolean方法中进行editor.putBoolean(mKey, value);操作,所以最终保存的是boolean值。

而EditTextPreference保存的EditText中输入的String值,ListPreference则保存的是android:entryValues属性数组中选中的String值。

五、自定义Preference

1、继承Preference类

2、重写构造方法并调用setWidgetLayoutResource(R.layout.preference_xxx);方法,其中preference_xxx只是整

个布局的右侧布局而已。

3、重写onBindView(View view),onClick(),efaultValue(TypedArray a, int index),onGetDonSetInitialValue(

boolean restoreValue, Object defaultValue),onSaveInstanceState()和onRestoreInstanceState(Parcelable state)方法。

4、写一个继承BaseSavedState的静态内部类。

5、API Demos中自定义了一个保存int值的Preference。

6、具体自定义细节参考API Demos中的MyPreference类。

六、实际上由于UI的不自由,很少见到使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值