Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Preference使用

Android Preference使用

編輯:關於Android編程

Android Preference經常使用在例如設置的功能,Android提供preference這個鍵值對的方式來處理這種情況,自動保存這些數據,並立時生效,這種就是使用android sharedpreferences方式進行保存的,不需要我們手動來寫,下面的圖片就是使用Preference來進行保存的           添加一個簡單的Preference             我們在res目錄下添加一個xml目錄,裡面添加一個itchq文件,這個文件相當於我們的Preference布局文件   復制代碼 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >          <CheckBoxPreference          android:key="checkbox"         android:title="CheckBoxPreference"         android:summary="check it box"         />     <RingtonePreference         android:key="ring"         android:title="ringtone"         android:summary="check a ringtone"         /> </PreferenceScreen> 復制代碼 這個就是itchq.xml裡面的代碼,這裡面的東西往下有介紹。我們再來看看那個Activity裡面如何使用的   復制代碼 package com.itchq.itchqpreference; import com.itchq.itchqpreference.R;   import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.PreferenceActivity; import android.preference.RingtonePreference;     public class ItChqActivity extends PreferenceActivity{     @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         addPreferencesFromResource(R.xml.itchq);     }      } 復制代碼 上面的就是Activity的代碼,這個Activity不是繼承Activity這個類的而是PreferenceActivity,其實這個看字面的意思就是Activity的繼承子類,用法和Activity差不多相同的,在Activity中使用setContentView()方法來加載一個布局文件,在這裡使用的是addPreferencesFromResource()方法來加載布局文件,既然是Activity就不要忘記在AndroidManifast.xml添加相應的配置,              preference 通用的xml 布局屬性   在preference布局文件中,我們可以會經常用到下面的屬性,這些屬性都是preference控件相互通用的。   android:key                            這個屬性相當於android:id的作用。用此key來唯一表示此Preference   android:title                            Preference的標題,   android:summary                   表示Preference提示語,相對於android:title來說顯示要小點,而且顯示位置在android:title下面   android:defaultValue               這個表示的是默認值,比如CheclPreference這種preference就可以指定默認是"true"還是“false”   android:enabled                      表示該Preference是否可用狀態   PreferenceScreen   preferenceScreen簡單的說就是所有Preference元素的根節點,我們可以看做是每一個PrederenceActivity布局的開始元素,當然這個PreferenceScreen也可以作為一個組件出現,裡面可以嵌套其它組件,那麼這個將會以另外的一屏顯示出來,就是當我們點擊後出現一個新的屏幕       復制代碼 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >          <CheckBoxPreference          android:key="checkbox"         android:title="CheckBoxPreference"         android:summary="check it box"         />     <RingtonePreference         android:key="ring"         android:title="ringtone"         android:summary="check a ringtone"         />     <PreferenceScreen          android:key="screen"         android:title="PreferenceScreen"         android:summary="screen it"         >         <SwitchPreference             android:key="switch"             android:title="switchPreference"             android:summary="switch it"             />         <EditTextPreference             android:key="edit"             android:title="editPreference"             android:summary="OK"             />     </PreferenceScreen> </PreferenceScreen> 復制代碼     如上面的代碼裡面有一個PreferenceScreen,這個PreferenceScreen裡面嵌套了SwitchPreference和EditTextPreference,android:key相當android:id,我們到時候通過這個在Activity中找到對應的組件,android:title就是標題,android:summary就是這個一個提示語,這三個屬性都是最基本的信息,看下圖:       上面圖片中最後一項就是我們添加的,“PreferenceScreen”就是我們的android:title,“screen it”就是這個android:summary,那麼當我們點擊這個選項時就會跳轉到一個新的頁面,頁面顯示如下圖:       這個就是上面的在PreferenceScreen中嵌套的兩個組件,SwitchPreference和EditTextPreference       PreferenceCategory   PreferenceCategory 這個控件類似於LinearLayou、RelativeLayout,用於組合一組Preference,使布局看起來具有層次關系,美觀       復制代碼     <PreferenceCategory          android:key="category"         android:title="PreferenceCategory"         >          <EditTextPreference             android:key="edit"             android:title="category"             android:summary="OK"             />     </PreferenceCategory> 復制代碼         如上圖中Category前面有一天很大的線,這個就是使用了PreferenceCategory效果。       Preference這個控件這裡簡單介紹一下,這個就和我們的TextView是一樣的,就是顯示一個文本       ListPreference   ListPreference這個就是顯示一個相當的list,先看下面的代碼       復制代碼     <ListPreference          android:key="list"         android:title="Options"         android:entries="@array/entry_list"                             android:entryValues="@array/values_list"         android:dialogTitle="list dialogtitle"         android:defaultValue="1"         /> 復制代碼     我們可以看到在這個代碼中android:entries屬性表示的就是這個listView對話框控件欲顯示的文本,android:entryValues與文本相對應的key-value鍵值對,value保存至sharedPreference文件,而我們的entries和entryValue屬性使用的數組定義在資源文件arrays.xml的數組名,我們來看看arrays.xml文件的定義   復制代碼 <resources>          <string-array name="entry_list">         <item>total</item>         <item>check</item>         <item>airplace</item>     </string-array>     <string-array name="values_list">         <item>0</item>         <item>1</item>         <item>2</item>     </string-array> </resources> 復制代碼 這個就是arrays.xml文件的定義,android:dialogTitle是指這個list彈出框的文本,android:defauleValues表示在缺省條件下顯示哪個值,這個值對應的是values_list的值,我們先來看看效果       如圖這個Options就是我們要ListPreference,當我們點擊這個之後顯示效果如下圖:           看到了把,我們的這個dialog形式來顯示listView的,默認android:defaultValues=“1”就是對應第二個"check",這個標題就是android:dialogTitle設置的   CheckBoxPreference   checkBoxPreference這個相當於checkBox,是一個多選,先看代碼       復制代碼     <CheckBoxPreference          android:key="checkbox_one"         android:title="checbox_one"         android:summaryOn="On_check_one"         android:summaryOff="offcheck_one"         />     <CheckBoxPreference         android:key="checkbox_two"         android:summaryOff="offcheck_two"         android:summaryOn="On_check_two"         android:title="checbox_two" />     <CheckBoxPreference         android:key="checkbox_three"         android:summaryOff="offcheck_three"         android:summaryOn="On_check_three"         android:title="checbox_three" /> 復制代碼 android:summaryOn和android:summaryOff表示在選擇和不選擇分別顯示的summary,運行效果圖如下:       當我們選擇checkbox_one是下面的offcheck_one提示就會修改為On_check_one   EditTextPreference   等同於EditText,相關的代碼顯示如下:           <EditTextPreference android:key="edit"        android:title="Set Package Name"         android:summary="Set the Package Name"         android:dialogTitle="Package Name:" />          當我們點擊下面的“Set Package Name“的時候就會彈出這麼一個文本對話框,”Package Name“就是這個android:dialogTitle的屬性   RingtonePreference   這個是一個鈴聲選項的功能,用得比較少不做介紹   MultiSelectListPreference   它的實現和ListPreference相似,不同的是還可以不選擇或者多個選擇,代碼是和ListPreference一樣的,運行效果如下圖:       從上面一些基本的Preference控件已經差不多介紹完了,下面再來介紹一個有關於點擊和存儲的功能使用:   首先來介紹一下如何在我們的PreferenceActivity中找到我們的控件,我們在Activity是通過findViewById()來找到我們指定的控件的,那麼在PreferenceActivity中我們可以使用findPreference這個方法來找到指定的方法,用法如下:           mCheck=(CheckBoxPreference) findPreference("checkbox");         mRing=(RingtonePreference) findPreference("ring"); findPreference裡面的參數就是我們使用android:key所定義的,這個應該容易理解。   在PreferenceActivity方法中,一個比較重要的監聽點擊事件方法為       復制代碼     @Override     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,             Preference preference) {         // TODO Auto-generated method stub                  return true;     } 復制代碼     參數 preference   表示的是點擊的對象,在我們繼承PreferenceActivity可以重寫該方法,來完成我們對Preference事件的捕捉,用法如下   復制代碼     @Override     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,             Preference preference) {         // TODO Auto-generated method stub         if(preference.getKey().equals("checkbox")){             Log.i("itchq", "checkbox");         }         return true;     } 復制代碼 除了上面這個監聽的方法之外,還有兩個重要的接口:   OnPreferenceChangeListener   當Preference的元素值發送改變時,觸發該事件,記住只有元素值改變才會觸發這個值,返回值為true 表示將新值寫入sharedPreference文件中   false 則不將新值寫入sharedPreference文件           @Override     public boolean onPreferenceChange(Preference preference, Object newValue) {         // TODO Auto-generated method stub         return false;     }     OnPreferenceClickListener   當點擊控件時觸發發生,可以做相應操作       @Override     public boolean onPreferenceClick(Preference preference) {         // TODO Auto-generated method stub         return false;     }     那麼這三個點擊事件在一起是什麼用的呢?它的規則如下:   點擊某個Preference控件後,會先回調onPreferenceChange()方法,即是否保存值(這個下面會講解這個值是如何保存的),然後再回調onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我們得到的控件值就是最新的Preference控件值。然後onPreferenceClick會比onPreferenceTreeClick()方法先調用,如果onPreferenceClick方法返回true,那就不會再調用onPreferenceTreeClick()方法,如果onPreferenceClick()返回false就會繼續調用onPreferenceTreeClick()方法
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved