突然發現已經好多天沒更新博客了,最近公司項目正在進行一個大跨度的重構,又碰上有新需求,一連好多天都是很晚才到家。其實這篇博文在草稿箱里面也存了很久了,本來想着不發了,不過感覺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>
最后試試效果,還是挺棒的。



