admin 管理员组

文章数量: 1087139


2024年4月20日发(作者:shell脚本书籍推荐 知乎)

Android进阶——Preference详解之

Preference系的基本应用和管理(二)

一、PreferenceActivity

1、PreferenceActivity概述

PreferenceActivity是一个抽象类,继承于ListActivity,以列表形式视图来展现界面,加载的

整个View也是基于ListActivity中那个ListView的,其最主要的优势在于添加Preference后

可让其状态持久化储存(通过SharedPreferences,一般存储在/data/data//shared_prefs文件夹

下的默认名为“app package name”+”_”的文件里),比如说用户勾选CheckBox

后退出应用,下一次进入到这一界面时候,对应的是CheckBox依然是被勾选状态,如果要

实现这样的机制,我们自己也可以实现,但是没有必要,因为Android已经替我们实现了,

就是我们的这一系列的主角——Preference,Preference会自动地替我们去保存这些状态对应

的值到对应的SharedPreferences文件里,而当我们每次启动的时候Acitivity

(PreferenceActivity)会自动根据key去获取相关数据,完成用户界面的更新。我们手机当

中的系统设置就是及其典型的Preference的应用,也正是由于工作中需要去客制化Settings,

才有了这一系列的文章。

上图是我们定制的Settings模块中的对应的部分SharedPreferences。关于Preference对应的

SharedPreferences往往很容易被我们忽视两点

并非我们第一次打开相应界面之后就会自动创建对应的SharedPreferences文件,而是在我们

改变了原有状态时候

并非所有的Preference及其子类都会创建,仅仅针对需要记录状态的Preference。

2、PreferenceActivity的初始化

PreferenceActivity其实和普通的Activity本质上来说区别不大,只不过多了些自动去读取

SharedPrefrences的值来更新界面和其他一些逻辑,所以初始化本质上来说并无很大的区别,

但是与普通Activity的layout不同,PreferenceActivity的layout我们可以理解成为两个部分:

其他View和一个id为的ListView,那么我们可以理解成为当我们在onCreate

方法里先调用setContentView完成整个Activity的View的构建(layout文件里必须包含id

为的listView,否则会报E/AndroidRuntime: Caused by:

eException: Your content must have a ListView whose id attribute is

‘’),再调用addPreferencesFromResource来完成Preference界面的构建;当

然也可以只调用addPreferencesFromResource方法。

1、继承PreferenceActivity实现具体业务类,重写相关生命周期方法

public class MainActivity extends PreferenceActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

te(savedInstanceState);

setContentView(ty_main);

addPreferencesFromResource(_preference);

}

...

}

2、通过addPreferencesFromResource(xml资源id)加载静态xml资源文件 或者 完全

通过代码构造对象再动态添加

在res文件夹下新建xml文件夹,再在xml文件中新建对应的xml资源,xml资源类似

我们在使用普通Activity时的layout文件,PreferenceActivity独特之处在于并不是使用普通

的layout文件,而是使用res下xml文件夹下的xml资源文件

res/xml/demo_

android:key="key_checkbox_preference"

android:summary="Some summay for CheckBoxPreference"

android:title="The Title Of CheckBoxPreference" />

也可通过代码去构造对象,添加容器之后再调用setPreferenceScreen(PreferenceScreen

preferenceScreen)把容器对象设置到Activity上

private void createPreference(){

PreferenceScreen preferenceScreen =

ferenceManager().createPreferenceScreen(this);//先构建PreferenceScreen对象得到一

个布局容器

ferenceScreen(preferenceScreen);//设置容器

CheckBoxPreference checkBoxPreference=new CheckBoxPreference(this);//构建

一个子Preference,待添加到容器中

(CHECKBOXPRERENCE_KEY);//设置key


本文标签: 界面 对应 状态