在上一篇文章中http://www.cnblogs.com/octobershiner/archive/2011/11/07/2239621.html ,和大家分享了一下android中實現設置的一個非常重要的類SharedPreference,其實android為實現程序的設置界面提佛提提供了更為簡介的方案,那就是今天要介紹的PreferenceActivity,我們看到很多的android程序設置界面都是類似的,其中大部分都采用了這樣的一種方式。
android為了方便開發,提供了一個特殊的activity類,PreferenceActivity,用來快速的實現一個設置界面,從名字就可以看出是繼承自Activity類(實際上是ListActivity),因而生命周期是一樣的。
那么常見的設置菜單有兩種,一是只有一個header的(左圖),另一種是在3.0發布后加入的,多header的設置菜單(右圖)。那么要實現多header的設置菜單,需要引用新的類PreferenceFragment,我們今天只討論實現一個header的(比較常用)。
那么如何用PreferenceActivity呢?
首先我們需要一個配置文件,類似於main.xml,就是我們需要一個資源布局文件。
在xml文件夾下創建一個conf.xml文件用於保存我們的布局
目前android只提供了幾種可選的組建,包括
PreferenceScreen 表示一個新的設置窗口,也是我們的布局的根標簽。
CheckBoxPreference 表示勾選的選項
ListPreference 表示一個選項列表
EditTextPreference 表示一個文本輸入框
PreferenceCategory 用於分組
RingtonePreference 用於鈴聲的設置
這些都繼承自Preference,他們都有的特點就是都有一個key,這個的作用和我們常用的id差不多,一會如果我們要引用這個組建就要通過key來找到他。還有一個共有的屬性就是title,他就是每一個設置組建所顯示的內容,summary屬性顯示下面的文本。
其中比較特殊的是ListPreference,他需要關聯一個數組資源,如上面代碼中的@array/user_type
更多的組建,大家可以產看sdk文檔,很多還沒有提供在xml直接使用。
那么如何將xml和activity關聯呢?
我們需要在onCreate方法里面調用
這樣程序啟動就會自動加載這個視圖文件,效果如下
這個時候如果我們修改了配置的選項,會默認的保存在data/data目錄下,如果我們想獲取這些值,就可以參照上一篇文章中說講的內容了。我們現在看一下這些數據存在哪里,在終端中打開adb shell ,我們切到data/data目錄下,進入到我們的包中,可以看到shared_prefs文件夾,里面就有我們的com.yui_preferences.xml文件,打開就可以看到已經寫入的一些數據了。
PreferenceActiviy實現事件監聽
preferenceAcitivity提供了連個事件監聽器
OnPreferenceChangeListener用來監聽某個屬性是否發生了變化。它只有一個方法:
public abstract boolean onPreferenceChange (Preference preference, Object newValue)
第一個參數是 發生變化的組件,第二個參數是新的數值
如果返回true的話就將變化寫入文件,返回false不發生改變
第二個監聽器更為靈活
OnPreferenceClickListener 用來監聽某個選項是否被點擊,它也只有一個方法
public abstract boolean onPreferenceClick (Preference preference)
返回true表示處理事件
接下來就是要給我們的組建注冊監聽器:
為了方便演示,我們使用了Toast實時的顯示信息,這個非常簡單,就不多介紹了,那么在處理事件的時候,我們只需要判斷一下是哪個組件需要響應就好了
最后看一下程序運行的結果吧,當我們改變設置的時候就可以監聽到了,結合上一篇文章就可以完成一個完整的設置---讀寫的模塊了。
程序的完整源代碼下載:https://github.com/octobershiner/diordna PreferenceDemo