一、写作前面
当我们做应用的时候,需要用户配置一些信息,而这就是通常所说的应用设置。
对于Android系统来说,系统本身的设置带来的用户体验和习惯已经深入人心,在我们的应用中同样用到类似的设置页,
那么用户使用起来就会更加亲切和方便。是吗?那我们应该怎么做到呢?这就要靠本文的主人公PreferenceActivity了。
二、设置的细节
打开Android手机的设置,如下图:
我们会看到整个页面被分为几组:无线网络、设备、个人、账户和系统。这个分组(或者叫分类)就是PreferenceCategory。
Wifi右边有开关,这一项就是CheckBoxPreference;其他还有ListPreference和EditTextPreference。
你的每一次设置,都会被Preference存下来,这就是setting的数据持久化。
三、如何实现自己的设置
下面我们来实现一个设置程序,看看PreferenceActivity的基本知识都有哪些。
首先要说的是,PreferenceActivity从API level1中就加入了,那么后续自Android3.0后有了Fragment的概念,同时也带来了PreferenceFragment,这是后话,今天我们先讲讲简单的。
这个例子有两个Activity组成,第一个是MainAcitivity,程序启动后直接到此,用来现实Setting中的各项设置内容;第二个是Setting,继承自PreferenceActivity,展示如何设置和数据存储操作等。我只是想演示PreferenceActivRity相关的知识,UI是直接托的,layout中也用了Hardcode,请看官只是取其精华(如果有的话),去其糟粕。
1.Setting
先来说说重头戏PreferenceActivity,它并不像普通的Activity那样用layout来做自己的界面,它是用专属的xml/preference.xml来构建自己的界面,然后在类中加入此xml。
本例演示三种常用preference,如下代码:
preferenc.xml
我将这三项preference分成两组(PreferenceCategory),cp3和DW.
每一个Preference中的都会包含一个key(android:key),它的功能相当于普通layout中的id。
title:这一项的标题,字体比较大。
summary:摘要,标题下面的文字,字体较小。
defaultValue:为设置summary之前的默认值。
其中数组list_preference在array.xml中定义:
Setting中是怎样加入这些UI信息呢?
此时,这个setting类就可以运行起来了。其实就是这么简单。也许你会问,我们设置了自己的偏好值,程序中如何获得呢?
我们需要注册一个Preference变化的Listener来监听这些事件。当我们做好设置后,Preference已经替我们做好了数据持久化了。
我们可以用sharedPreference来获得这些值。
下面来看:
这时运行的效果如下:
当我们进行如下操作时:
结果如下:
到此,setting的功能就实现了。那么,在其他Activity中如何获得设置的值呢?也是用sharedPreference来实现:
看看我的MainActivity:
完整代码在此:
最后补充一点:
在preferences.xml添加title,
显示效果如下: