Android进阶——Preference详解之Preference系的基本应用和管理(二)
一、PreferenceActivity
1、PreferenceActivity概述
PreferenceActivity是一个抽象类,继承于ListActivity,以列表形式视图来展现界面,加载的整个View也是基于ListActivity中那个ListView的,其最主要的优势在于添加Preference后可让其状态持久化储存(通过SharedPreferences,一般存储在/data/data//shared_prefs文件夹下的默认名为“app package name”+”_l”的文件里),比如说用户勾选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为android.R.id.list的ListView,那么我们可以理解成为当我们在onCreate方法里先调用setContentView完成整个Activity的View的构建(layout文件里必须包含id为android.R.id.list的listView,否则会报E/AndroidRuntime: Caused by: Java.lang.RuntimeException: Your content must have a ListView whose id attribute is ‘android.R.id.list’),再调用addPreferencesFromResource来完成Preference界面的构建;当然也可以只调用addPreferencesFromResource方法。
1、继承PreferenceActivity实现具体业务类,重写相关生命周期方法
public class MainActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Create(savedInstanceState);
setContentView(R.layout.activity_main);
l.demo_preference);
}
...
}
2、通过addPreferencesFromResource(xml资源id)加载静态xml资源文件 或者 完全通过代码构造对象再动态添加
在res文件夹下新建xml文件夹,再在xml文件中新建对应的xml资源,xml资源类似我们在使用普通Activity时的layout文件,PreferenceActivity独特之处在于并不是使用普通的layout文件,而是使用res下xml文件夹下的xml资源文件
res/xml/l
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="schemas.android/apk/res/android" >
<CheckBoxPreference
android:key="key_checkbox_preference"
android:summary="Some summay for CheckBoxPreference"
android:title="The Title Of CheckBoxPreference" />
</PreferenceScreen>
也可通过代码去构造对象,添加容器之后再调用setPreferenceScreen(PreferenceScreen preferenceScreen)把容器对象设置到Activity上
private void createPreference(){
PreferenceScreen preferenceScreen = PreferenceManager().createPreferenceScreen(this);//先构建PreferenceScreen对象得到一个布局容器
this.setPreferenceScreen(preferenceScreen);//设置容器
CheckBoxPreference checkBoxPreference=new CheckBoxPreference(this);//构建一个子Preference,待添加到容器中
checkBoxPreference.setKey(CHECKBOXPRERENCE_KEY);//设置key
checkBoxPreference.setTitle("The Title Of CheckBoxPreference");//设置title
checkBoxPreference.setSummary("Some summay for CheckBoxPreference");
preferenceScreen.addPreference(checkBoxPreference);//添加到容器中
}
二、Preference的使用
安卓intent用法前一篇文章我们讲述了Preference家族的基类(接下来我们所要介绍的其他子类Preference一定是继承了他的所有属性也可以理解成都是在继承他所展示的UI效果及交互功能的基础上升级的)而且Preference可以实例化,那么我们就可以把他看成对应的一个组件,其实和我们熟悉的TextView一样,所以我们需要使用的时候第一步肯定是先得到他
的对象——而构造对象我们都可以通过两种方式:通过其对应的构造方法或者其他方法和通过xml映射(或许说法不够准确),接着第二步PreferenceActivity的初始化,再接着根据业务设置相关监听。
1、 构造Preference容器和Preference对象
而构造对象我们都可以通过两种方式:通过其对应的构造方法或者其他方法和通过映射xml(或者讲法不够准确)。
res/xml/l
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="schemas.android/apk/res/android"
android:key="using_categories_in_root_screen"
android:summary="Using Preference Categories"
android:title="Categories">
<Preference
android:key="key_prerence"
android:title="Preferece"
android:summary="Preference Demo"
/>
</PreferenceScreen>
2、初始化PreferenceActivity和设置相关监听
常见的Preference的事件有两个:setOnPreferenceClickListener和onPreferenceChange
设置Preference点击监听
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
//当接收到Click事件之后触发
return true;
}
});
设置Preference对应的SharedPrefernces值监听
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论