用户配置界面PreferenceActivity的使用【转】
转自: http://www.ourunix.org/android/post/147.html
我们经常会看到Android手机的配置界面,也会看到一些应用会带有配置界面,由用户自行决定是否使用某些功能,既然是配置界面那就会涉及到配置选项的存储,谈到存储我们已经陆续介绍到了使用SharedPreferences和ContentProvider存储(存取)数据。而本篇介绍的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。如下图示:

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

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

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

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

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

其中Summary On 和Summary Off是分别显示选择和未选择时的介绍,而下面的Key和Tiltle是必须的要填写,因为Key会涉及到SharedPreferences存储的Key值,Title是该配置项的名称。我这里都是写在了Strings中:
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>
所以配置时只需选择他们即可。其他的配置相关的值如下:
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。
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的选项监-听,这个是和SharedPreferences一样,下次有时间再做更新。你可以参看:
浙公网安备 33010602011771号