转载

Android学习笔记(十四)方便实用的首选项-PreferenceActivity

突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家。其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉PreferenceActivity在使用起来还是非常方便与实用的,再加上介绍PreferenceActivity的貌似不太多,还是发出来吧,以备自己和其他人后期参考。

Android提供了一个XML驱动的框架,用于为应用程序创建系统样式的Preferences Screen。通过使用该框架,能够确保应用程序中的PreferenceActivity与本地和其他第三方应用程序中所使用的一致。当然,如果对PreferenceActivity深入研究起来还是有一定复杂度的,这里只介绍一些最常用的。

一、创建Preference Screen布局。

首先需要在xml文件中创建Preference Screen布局以供PreferenceActivity调用。与标准UI布局不同,首选项定义存储在res/xml资源文件夹中。方便的时,有很多控件都已经定义好,我们直接添加到Preference Screent中使用就可以了,一些原生的首选项控件如下:

· CheckBoxPreference :一个标准的首选项复选框空GIA你,用于将首选项设置为真或者假。

· EditTextPreference :允许用户输入一个字符串作为一个首选项。在运行时选择首选项文本将会显示一个输入对话框。

· ListTextPreference :该首选项是一个包含了可供选择的值的列表。可以定义不同的数组用于包含显示文本和选项值。

· MultiSelectPreference :在Activity 3.0(API level 11)中引入的首选项,类似于复选框列表。

· RingtonePreference : 一个专用的列表首选项,显示可供用户选的可用铃声列表。

除了一些原生的首选项控件外,还可以通过扩展Preference类自定义首选项控件。

下面在res/xml下创建preference_activity.xml,在里面添加几个控件,代码如下:(注意:在创建时注意将Resource Type选为 Preference类型,file要小写)

1 <?xml version="1.0" encoding="utf-8"?>  2 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >  3     <CheckBoxPreference   4         android:key="checkbox"  5         android:title="开关"  6         android:summaryOn="开"  7         android:summaryOff="关"/>  8       9     <ListPreference  10         android:key="list" 11         android:title="选择" 12         android:summary="请选择" 13         android:entries="@array/entries" 14         android:entryValues="@array/values"/> 15      16     <EditTextPreference  17         android:key="edit" 18         android:title="title" 19         android:summary="summary" 20         android:dialogTitle="dialogTitle" 21         android:dialogMessage="dialogMessage"/> 22  23 </PreferenceScreen>

其中ListPreference控件用到得entries和values如下(在res/values/list_pf.xml):

1 <?xml version="1.0" encoding="utf-8"?>  2 <resources>  3     <string-array   4         name="entries">  5         <item >一</item>  6         <item >二</item>  7         <item >三</item>  8     </string-array>  9     <string-array name="values"> 10         <item >第一项</item> 11         <item >第二项</item> 12         <item >第三项</item> 13     </string-array> 14 </resources>

二、创建PreferenceActivity的子类

类似于创建一个Activity,可以通过继承PreferenceActivity创建一个其子类,并通过addPreferencesFromResource(R.xml.preference_activity)方法加载Preference Screen文件。各控件的具体用法,请参考注释。

1 /**  2  *   3  * @author liuwei  4  * @data 2015/11/08  5  */  6 public class MyPreferenceActivity extends PreferenceActivity {  7     PreferenceManager pm;  8     CheckBoxPreference checkbox;  9     ListPreference listP; 10     EditTextPreference editP; 11  12     @Override 13     protected void onCreate(Bundle savedInstanceState) { 14         super.onCreate(savedInstanceState); 15         addPreferencesFromResource(R.xml.preference_activity); 16         // 获取PreferenceManager对象 17         pm = getPreferenceManager(); 18  19         /**************** 绑定checkbox控件 *******************/ 20         checkbox = (CheckBoxPreference) pm.findPreference("checkbox"); 21         // 获取控件状态 22         boolean n = checkbox.isChecked(); 23         Toast.makeText(getApplicationContext(), "当前状态为:" + n, 0).show(); 24  25         /**************** 绑定listP控件 **********************/ 26         listP = (ListPreference) pm.findPreference("list"); 27         // 获取listP控件的key和value 28         CharSequence e = listP.getEntry(); 29         String v = listP.getValue(); 30         Toast.makeText(getApplicationContext(), e + ":" + v, 0).show(); 31  32         /**************** 绑定editP控件 **********************/ 33         editP = (EditTextPreference) pm.findPreference("edit"); 34         // 获取控件内容 35         String edit = editP.getText(); 36         Toast.makeText(getApplicationContext(), "编辑内容:" + edit, 0).show(); 37     } 38 }

别忘了AndroidManifest.xml中配置,如下:

<activity      android:name=".MyPreferenceActivity"> </activity>

最后试试效果,还是挺棒的。

Android学习笔记(十四)方便实用的首选项-PreferenceActivity Android学习笔记(十四)方便实用的首选项-PreferenceActivity Android学习笔记(十四)方便实用的首选项-PreferenceActivity

正文到此结束
Loading...