今天我們來講preferenceactivity的使用。我們先來認識一下它,看看它長什麼樣?呵呵,截圖如下:

看到沒?這就是preferenceactivity.看起來蠻眼熟的,在哪見過。呵呵,對,在我們得模拟器“設定”—>“無線和網絡”中,就使用了這個。呵呵,下面來跟據一個項目執行個體,來講述它的具體應用。
1、 建立android項目,命名為preferenceactivity。
2、 在values目錄下建立一個array.xml檔案,以備下面程式使用,該檔案代碼如下:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="entries">
<item>test1</item>
<item>test2</item>
<item>test3</item>
</string-array>
<string-array name="entriesvalue">
<item>1</item>
<item>2</item>
<item>3</item>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="entries">
<item>test1</item>
<item>test2</item>
<item>test3</item>
</string-array>
<string-array name="entriesvalue">
<item>1</item>
<item>2</item>
<item>3</item>
</resources>
3、 在res目錄下建立一個xml目錄,在裡面建立一個preference.xml檔案,該檔案的具體内容如下:
<?xml version="1.0" encoding="utf-8"?>
<preferencescreen xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<preferencecategory android:title="我的位置">
<checkboxpreference
android:key="first"
android:title="飛行模式"
android:defaultvalue="true"
/>
android:key="second"
android:title="wi-fi"
android:summaryon="開啟"
android:summaryoff="關閉"
<preference
android:key="third"
android:title="wi-fi設定"
android:summary="設定和管理無線接入點"
<listpreference
android:key="listpreference"
android:title="listpreference"
android:summary="listpreference測試"
android:dialogtitle="listpreference"
android:entries="@array/entries"
android:entryvalues="@array/entriesvalue"
<edittextpreference
android:key="edittextpreference"
android:title="edittextpreference"
android:summary="點選輸入"
android:dialogtitle="輸入設定"
/>
<ringtonepreference
android:key="ringtonepreference"
android:title="ringtonepreference"
android:summary="選擇鈴聲"
/>
</preferencecategory>
</preferencescreen>
<preferencescreen xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<preferencecategory android:title="我的位置">
<checkboxpreference
android:key="first"
android:title="飛行模式"
android:defaultvalue="true"
/>
android:key="second"
android:title="wi-fi"
android:summaryon="開啟"
android:summaryoff="關閉"
<preference
android:key="third"
android:title="wi-fi設定"
android:summary="設定和管理無線接入點"
<listpreference
android:key="listpreference"
android:title="listpreference"
android:summary="listpreference測試"
android:dialogtitle="listpreference"
android:entries="@array/entries"
android:entryvalues="@array/entriesvalue"
<edittextpreference
android:key="edittextpreference"
android:title="edittextpreference"
android:summary="點選輸入"
android:dialogtitle="輸入設定"
<ringtonepreference
android:key="ringtonepreference"
android:title="ringtonepreference"
android:summary="選擇鈴聲"
</preferencecategory>
</preferencescreen>
4、 以上做好後,我們就隻要修改程式中的部分代碼了。首先,我們得讓它繼承自preferenceactivity的activity,然後在主程式中調用addpreferencesfromresource(r.xml.preference);就可以了。具體代碼如下:
public class preferenceactivitytest extends preferenceactivity implements onsharedpreferencechangelistener{
sharedpreferences prefs;
listpreference listpreference;//聲明listpreference
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
addpreferencesfromresource(r.xml.preference);
//我們可以通過各個preference的key來得到preference的view,進而可以用它進行相關操作
listpreference=(listpreference)findpreference("listpreference");
string str=listpreference.getkey();
system.out.println(str);
/*preferenceactivity中的設定存儲是完全自動的,你不需要再用代碼去實作
* 設定的存儲,preferenceactivity建立後會自動建立一個配置檔案/data/
* data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。
* 如果要擷取該檔案中的值,我們可以通過以下方式取得*/
prefs=preferencemanager.getdefaultsharedpreferences(this);
string value=prefs.getstring("listpreference", "xyz");
toast.maketext(this, value, toast.length_long).show();
}
public boolean onpreferencetreeclick(preferencescreen preferencescreen,
preference preference) {
// todo auto-generated method stub
if(preference.getkey().equals("third")){
//這裡可以操作,實作界面的跳轉
intent intent=new intent();
intent.setclass(this, runactivity.class);
startactivity(intent);
}
return super.onpreferencetreeclick(preferencescreen, preference);
//當選擇或是輸入不同的值時,他們的值會自動儲存到sharedpreferences中,當值發生改變的時候會觸發
public void onsharedpreferencechanged(sharedpreferences sharedpreferences,
string key) {
}
public class preferenceactivitytest extends preferenceactivity implements onsharedpreferencechangelistener{
sharedpreferences prefs;
listpreference listpreference;//聲明listpreference
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
addpreferencesfromresource(r.xml.preference);
//我們可以通過各個preference的key來得到preference的view,進而可以用它進行相關操作
listpreference=(listpreference)findpreference("listpreference");
string str=listpreference.getkey();
system.out.println(str);
/*preferenceactivity中的設定存儲是完全自動的,你不需要再用代碼去實作
* 設定的存儲,preferenceactivity建立後會自動建立一個配置檔案/data/
* data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。
* 如果要擷取該檔案中的值,我們可以通過以下方式取得*/
prefs=preferencemanager.getdefaultsharedpreferences(this);
string value=prefs.getstring("listpreference", "xyz");
toast.maketext(this, value, toast.length_long).show();
}
public boolean onpreferencetreeclick(preferencescreen preferencescreen,
preference preference) {
// todo auto-generated method stub
if(preference.getkey().equals("third")){
//這裡可以操作,實作界面的跳轉
intent intent=new intent();
intent.setclass(this, runactivity.class);
startactivity(intent);
return super.onpreferencetreeclick(preferencescreen, preference);
//當選擇或是輸入不同的值時,他們的值會自動儲存到sharedpreferences中,當值發生改變的時候會觸發
public void onsharedpreferencechanged(sharedpreferences sharedpreferences,
string key) {
5、 到此我們得項目架構就已經搭建好了,單擊執行便會得到我們以上的效果。
但是我們得任務還沒完,下面的講解才是本節的重點。學習preferenceactivity我們需要注意一下幾點:
第一, preference下的view是有限的,隻有下面幾個:
checkboxpreference:checkbox選擇項,對應的值的ture或flase
edittextpreference:輸入編輯框,值為string類型,會彈出對話框供輸入。
listpreference: 清單選擇,彈出對話框供選擇。
preference:隻進行文本顯示,需要與其他進行組合使用。
preferencecategory:用于分組。
ringtonepreference:系統玲聲選擇
第二,preferenceactivity布局中的一些屬性。
android:key 唯一辨別符。它對應儲存的xml儲存的配置檔案中的節點的 name屬性。android:defaultvalue 預設值,對應xml中的value屬性的值。
android:title:顯示标題(大字型顯示)。
android:summary:副标題(小字型顯示)。
android:dialogtitle:彈出對話框的标題
android:entries:清單中顯示的值。為一個數組,通讀通過資源檔案進行設定。
android:entryvalues:清單中實際儲存的值,與entries對應。
第三,當preferenceactivity上的view有所更改時,系統會自動将對應的值更新到xml配置檔案中,該檔案可以在android 的 file explorer 中的 data/data/"yourpagename"/shared_prefs/"yourpagename"_prefenrences.xml中找到。“yourpagename”表示你項目所在的包。
第四,如何響應preferenceactivity操作。
其實,我們隻要重寫preferenceactivity的onpreferencetreeclick的方法就可以了,通過參數preference來判斷是對那一個元素進行的,并根據需要進行操作。
到此,内容已經基本上剖析完全了。呵呵!