用户配置界面PreferenceActivity的使用【转】

转自: http://www.ourunix.org/android/post/147.html

 

      我们经常会看到Android手机的配置界面,也会看到一些应用会带有配置界面,由用户自行决定是否使用某些功能,既然是配置界面那就会涉及到配置选项的存储,谈到存储我们已经陆续介绍到了使用SharedPreferencesContentProvider存储(存取)数据。而本篇介绍的PreferenceActivity是如何保存的配置数据的呢?    

 preference下的View是有限的,只有下面几个:

  • CheckBoxPreference:CheckBox选择项,对应的值的ture或flase
  • EditTextPreference:输入编辑框,值为String类型,会弹出对话框供输入。
  • ListPreference: 列表选择,弹出对话框供选择。
  • Preference:只进行文本显示,需要与其他进行组合使用。
  • PreferenceCategory:用于分组。
  • RingtonePreference:系统玲声选择

      因为只是存储用户的一些简单配置文件值,而SharedPreferences正好可以满足Preference的键值对存储。所以用户配置界面PreferenceActivity,就是使用SharedPreferneces以键值对的形式进行保存用户配置文件的,当然,既然是使用SharedPreferences保存数据,所有的一切关于SharedPreferences的性质我们都可以用得到,比如配置更改存储、数据变化监-听等,PreferenceActivity的Preference在这里就是指的是SharedPreferences,而PreferenceActivity的Activity则是指其又可以像Activity一样展示出来。总言之,PreferenceActivity就是能够使用SharedPreferneces保存的数据的Activity。本篇就主要来介绍如何来创建PreferenceActivity。

创建项目工程

        创建名称为PreferenceActivity的工程,并且创建一个默认的Activity,需要注意的是该Activity并不再去继承Activity而是继承PreferenceActivity。如下图示:

弯柚博客-用户配置界面PreferenceActivity

创建配置文件

        ADT可以帮助我们可视化创建添加一个配置文件,这个过程同创建Android xml文件一样。注意,只不过这次选择的不是Layout,而是Preference,而且注意Folder路径是 res/xml。下面我们就先来创建xml文件夹,然后再该文件夹中创建文件名为Preference.xml的配置文件。

弯柚博客-用户配置界面PreferenceActivity

在res目录下创建xml文件夹

        创建好xml文件夹之后,接着我们在该文件下中创建xml文件,Resource Type为Preference,File中填写xml的文件名称:preference.xml,最后选择Root Element为PreferenceScreen。如下:

弯柚博客-用户配置界面PreferenceActivity

添加完成之后,在res/xml/下打开添加的preference.xml文件。可以看到Android也为我们提供两种编辑模式,可视化的结构设计及xml源码设计。这里walfred推荐使用structure进行创建。如图所示:

弯柚博客-用户配置界面PreferenceActivity

        这里仅仅为了演示就按照次序选择了CheckBoxPreference、EditTextPreference、ListPreference、RingtonePreference四个可配置项,其中CheckBoxPreference是勾选框、EditTextPreference为编辑框、ListPreference为列表显示而RingtonePreference是铃声选择。

弯柚博客-用户配置界面PreferenceActivity

        接着我们开始一项一项的配置,首先从CheckBoxPreference开始,我们弹开右侧需要填写的元素,如下:

弯柚博客-用户配置界面PreferenceActivity

        其中Summary On 和Summary Off是分别显示选择和未选择时的介绍,而下面的Key和Tiltle是必须的要填写,因为Key会涉及到SharedPreferences存储的Key值,Title是该配置项的名称。我这里都是写在了Strings中:

XML/HTML代码
1 <string name="CheckBoxPreferenceValue_key">CheckBoxPreferenceValue_key</string>  
2 <string name="CheckBoxPreferenceValue_Title">CheckBoxPreferenceValue_Title</string>  
3 <string name="CheckBoxPreferenceValue_On">CheckBoxPreferenceValue_On</string>  
4 <string name="CheckBoxPreferenceValue_Off">CheckBoxPreferenceValue_Off</string>  

        所以配置时只需选择他们即可。其他的配置相关的值如下:

XML/HTML代码
  
 1 <?xml version="1.0" encoding="utf-8"?>  
 2 <resources>  
 3   
 4     <string name="hello">Hello World!</string>  
 5     <string name="app_name">PreferenceActivity</string>  
 6     <string name="CheckBoxPreferenceValue_key">CheckBoxPreferenceValue_key</string>  
 7     <string name="CheckBoxPreferenceValue_Title">CheckBoxPreferenceValue_Title</string>  
 8     <string name="CheckBoxPreferenceValue_On">CheckBoxPreferenceValue_On</string>  
 9     <string name="CheckBoxPreferenceValue_Off">CheckBoxPreferenceValue_Off</string>  
10     <string name="EditTextPreference_Key">EditTextPreference_Key</string>  
11     <string name="EditTextPreference_Title">EditTextPreference_Title</string>  
12     <string name="EditTextPreference_Summary">EditTextPreference_Summary</string>  
13     <string name="EditTextPreference_Dialog_Title">EditTextPreference_Dialog_Title</string>  
14     <string name="EditTextPreference_Dialog_Message">EditTextPreference_Dialog_Message</string>  
15     <string name="ListPreference_key">ListPreference_key</string>  
16     <string name="ListPreference_Summary">ListPreference_Summary</string>  
17     <string name="ListPreference_Title">ListPreference_Title</string>  
18   
19     <string-array name="ListPreference_Array">  
20         <item>ListPreference_Array01</item>  
21         <item>ListPreference_Array02</item>  
22         <item>ListPreference_Array03</item>  
23     </string-array>  
24     <string-array name="ListPreference_Array_Value">  
25         <item>ListPreference_Array_Value01</item>  
26         <item>ListPreference_Array_Value02</item>  
27         <item>ListPreference_Array_Value03</item>  
28     </string-array>  
29   
30     <string name="RingtonePreference_key">RingtonePreference_key</string>  
31     <string name="RingtonePreference_Title">RingtonePreference_Title</string>  
32   
33     <string name="RingtonePreference_Summary">RingtonePreference_Summary</string>  
34   
35 </resources>  

 

修改代码部分

        在java代码中,我们需要获得具有配置值的SharedPreferences,并为之附上SharedPreferences的名称,以备以后我们好在整个程序中使用该SharedPreferences。

Java代码
 1 public class PreferenceTest extends PreferenceActivity {  
 2     private Context mContext;  
 3     private final String PRFS_NAME = "PreferenceTest";  
 4     private SharedPreferences prefs;  
 5   
 6     @Override  
 7     protected void onCreate(Bundle savedInstanceState) {  
 8         // TODO Auto-generated method stub  
 9         super.onCreate(savedInstanceState);  
10         mContext = this;  
11           
12         //为本程序的SharedPreferences设置名称  
13         getPreferenceManager().setSharedPreferencesName(PRFS_NAME);  
14           
15         //从xml文件中初始该SharedPreferences  
16         addPreferencesFromResource(R.xml.preference);  
17     }  
18 }  
运行程序

         运行改程序,效果如下:

弯柚博客-用户配置界面PreferenceActivity

配置界面

弯柚博客-用户配置界面PreferenceActivity

编辑框的配置

弯柚博客-用户配置界面PreferenceActivity

列表选择

更多

        关于PreferenceActivity的选项监-听,这个是和SharedPreferences一样,下次有时间再做更新。你可以参看:

        使用SharedPreferences实现简单数据存储

        使用SharedPreferences实现简单数据应用程序共享

        源码下载:弯柚博客-用户配置界面PreferenceActivity-源码

posted on 2013-05-08 13:48  林盛  阅读(233)  评论(0)    收藏  举报