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>

  最后試試效果,還是挺棒的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM