天天看點

Android開發之PreferenceActivity .

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

Android開發之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來判斷是對那一個元素進行的,并根據需要進行操作。

到此,内容已經基本上剖析完全了。呵呵!