閱讀705 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android開發之PreferenceActivity .

 

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

看到沒?這就是PreferenceActivity.看起來蠻眼熟的,在哪見過。嗬嗬,對,在我們得模擬器“設置”—>“無線和網絡”中,就使用了這個。嗬嗬,下麵來跟據一個項目實例,來講述它的具體應用。

1、  創建Android項目,命名為PreferenceActivity。

2、  在values目錄下新建一個array.xml文件,以備下麵程序使用,該文件代碼如下:

  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <resources>    
  3. <string-array name="entries">    
  4.     <item>test1</item>    
  5.     <item>test2</item>    
  6.     <item>test3</item>    
  7. </string-array>    
  8. <string-array name="entriesvalue">    
  9.     <item>1</item>    
  10.     <item>2</item>    
  11.     <item>3</item>    
  12. </string-array>    
  13. </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> </string-array> </resources>

3、  在res目錄下新建一個xml目錄,在裏麵新建一個preference.xml文件,該文件的具體內容如下:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <PreferenceScreen xmlns:android="https://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <PreferenceCategory android:title="我的位置">  
  8.        <CheckBoxPreference  
  9.           android:key="first"  
  10.           android:title="飛行模式"  
  11.           android:defaultValue="true"  
  12.        />  
  13.        <CheckBoxPreference  
  14.           android:key="second"  
  15.           android:title="Wi-Fi"  
  16.           android:summaryOn="開啟"  
  17.           android:summaryOff="關閉"  
  18.           android:defaultValue="true"  
  19.        />  
  20.        <Preference  
  21.           android:key="third"  
  22.           android:title="Wi-Fi設置"  
  23.           android:summary="設置和管理無線接入點"  
  24.        />  
  25.        <ListPreference  
  26.           android:key="ListPreference"  
  27.           android:title="ListPreference"  
  28.           android:summary="ListPreference測試"  
  29.           android:dialogTitle="ListPreference"  
  30.           android:entries="@array/entries"  
  31.           android:entryValues="@array/entriesvalue"  
  32.        />  
  33.        <EditTextPreference    
  34.         android:key="EditTextPreference"    
  35.         android:title="EditTextPreference"    
  36.         android:summary="點擊輸入"    
  37.         android:dialogTitle="輸入設置"    
  38.        />    
  39.        <RingtonePreference    
  40.         android:key="RingtonePreference"    
  41.         android:title="RingtonePreference"    
  42.         android:summary="選擇鈴聲"    
  43.        />   
  44.     </PreferenceCategory>  
  45. </PreferenceScreen>  
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:andro 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" /> <CheckBoxPreference android:key="second" android:title="Wi-Fi" android:summaryOn="開啟" android:summaryOff="關閉" android:defaultValue="true" /> <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);就可以了。具體代碼如下:

  1. public class PreferenceActivityTest extends PreferenceActivity implements OnSharedPreferenceChangeListener{  
  2.     SharedPreferences prefs;  
  3.     ListPreference listPreference;//聲明ListPreference  
  4.     /** Called when the activity is first created. */  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         addPreferencesFromResource(R.xml.preference);  
  9.         //我們可以通過各個preference的key來得到Preference的view,從而可以用它進行相關操作  
  10.         listPreference=(ListPreference)findPreference("ListPreference");  
  11.         String str=listPreference.getKey();  
  12.         System.out.println(str);  
  13.         /*PreferenceActivity中的設置存儲是完全自動的,你不需要再用代碼去實現  
  14.          * 設置的存儲,PreferenceActivity創建後會自動創建一個配置文件/data/  
  15.          * data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。  
  16.          * 如果要獲取該文件中的值,我們可以通過以下方式取得*/  
  17.         prefs=PreferenceManager.getDefaultSharedPreferences(this);  
  18.         String value=prefs.getString("ListPreference", "xyz");  
  19.         Toast.makeText(this, value, Toast.LENGTH_LONG).show();  
  20.     }  
  21.     @Override  
  22.     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,  
  23.             Preference preference) {  
  24.         // TODO Auto-generated method stub  
  25.         if(preference.getKey().equals("third")){  
  26.             //這裏可以操作,實現界麵的跳轉  
  27.              Intent intent=new Intent();  
  28.              intent.setClass(this, RunActivity.class);  
  29.              startActivity(intent);  
  30.         }  
  31.         return super.onPreferenceTreeClick(preferenceScreen, preference);  
  32.     }  
  33.     //當選擇或是輸入不同的值時,他們的值會自動保存到sharedpreferences中,當值發生改變的時候會觸發  
  34.     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,  
  35.             String key) {  
  36.         // TODO Auto-generated method stub  
  37.           
  38.     }  
  39. }  
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(); } @Override 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) { // TODO Auto-generated method stub } }

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

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

最後更新:2017-04-02 06:51:53

  上一篇:go Android中的JSON詳細總結
  下一篇:go Linux Epoll介紹和程序實例