Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 開發入門 >> Android PreferenceActivity 詳解教程

Android PreferenceActivity 詳解教程

編輯:開發入門

為了引入這個概率 首先從需求說起 即:現有某Activity專門用於手機屬性設置 那麼應該如何做呢?

根據已學知識 很快一個念頭閃過 即:Activity + Preference 組合 前者用於界面構建 後者用於設置數據存放  其實 這是正確的 但是 這會比較繁瑣 因為 每個設置選項 都要建立與其對應的Preference 

所以  現在有更好的選擇了 那就是本文的主角:PreferenceActivity 
從名字應該可以看出 其實 Activity 與 Perference 的混合物

還是從需求說起  常見屬性設定  有哪幾種方式:

1. CheckBox  用於 確定/取消  某項功能    如:是否靜音   對應於:CheckBoxPreference   其在Preference 有一個選項與其自動綁定 下同

2.  ListVIEw 用於列出所有選擇  如:鈴聲選擇 列出所有聲音供選擇使用  對應於:ListPreference

3.  屬性結合 用於列出一系列相關屬性 如:所有與短消息有關的功能 對應於:PreferenceScreen  該項僅用於界面 故與Preference無關

界面 其實 討論這個 比較雞肋 大家自己試著運行就一目了然了  所以 覺得還是以步驟為主

鑒於PreferenceActivity使用 網絡很多 故此略過 為了給自己備份 防止以後用到 大致敘述一下
[代碼 步驟]
1.  PreferenceActivity  界面比較特別 在 res/xml/setting.XML

  1. <?XML version="1.0" encoding="utf-8"?>
  2. <PreferenceScreen
  3. XMLns:android="http://schemas.android.com/apk/res/android">
  4. <CheckBoxPreference
  5. android:key="autoBack"
  6. android:title="自動回復"
  7. android:summaryOn="開啟"
  8. android:summaryOff="關閉"
  9. android:defaultValue="true"
  10. />

  11. <PreferenceCategory android:title="SMS 助手">
  12. <CheckBoxPreference
  13. android:key="smsSilence"
  14. android:title="靜音"
  15. android:summaryOn="開啟"
  16. android:summaryOff="關閉"
  17. android:defaultValue="false"
  18. />
  19. <PreferenceScreen android:title="更多選項">
  20. <CheckBoxPreference
  21. android:key="cb21"
  22. android:title="功能1"
  23. android:summaryOn="開啟"
  24. android:summaryOff="關閉"
  25. android:defaultValue="true"
  26. />
  27. <CheckBoxPreference
  28. android:key="cb22"
  29. android:title="功能2"
  30. android:summaryOn="使用"
  31. android:summaryOff="停用"
  32. android:defaultValue="true"
  33. />
  34. <ListPreference
  35. android:key="list1"
  36. android:title="android forum"
  37. android:summary="開發論壇"
  38. android:dialogTitle="請選擇論壇"
  39. android:entries="@array/entrIEs_list_preference"
  40. android:entryValues="@array/entrIEsvalue_list_preference"
  41. />
  42. <EditTextPreference
  43. android:key="et1"
  44. android:title="EditTextPreference Sample"
  45. android:summary="點擊輸入"
  46. android:dialogTitle="輸入設置"
  47. android:defaultValue="Hello EditTextPreference"
  48. />
  49. </PreferenceScreen>
  50. </PreferenceCategory>

  51. <PreferenceCategory android:title="其他選項">
  52. <RingtonePreference
  53. android:key="rt1"
  54. android:title="RingtonePreference Sample"
  55. android:summary="選擇鈴聲"
  56. />
  57. </PreferenceCategory>
  58. </PreferenceScreen>
復制代碼

2. 導入setting.XML

  1. addPreferencesFromResource(R.XML.settings);
復制代碼

emulator 運行截圖:
1.jpg



點開"更多選項"
2.jpg



具體 請大家自己嘗試之

3. 其實 關於PreferenceActivity 問題 基本結束了 但是 初次使用 會碰到一些坎坷 現一一討論

4. 監聽設定變化問題    普通布局裡的監聽  比較簡單 先通過findViewById()獲得目標VIEw  再在其上注冊監聽器即可

但是 PreferenceActivity 並沒有提供findVIEwById()  也就無法監聽 那麼 怎麼做呢?   

- 得到SharedPreferences 句柄

  1. sp = PreferenceManager.getDefaultSharedPreferences(this);
復制代碼

- 在 sp 之上注冊改變監聽器

  1. sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){

  2. @Override
  3. //sharedPreferences:句柄
  4. //key: 改變 鍵值
  5. public void onSharedPreferenceChanged(
  6. SharedPreferences sharedPreferences, String key) {
  7. // TODO Auto-generated method stub

  8. if(key.equals("autoBack")){
  9. Boolean autoBack = sharedPreferences.getBoolean("autoBack", false);
  10. if(autoBack){
  11. Log.d("TAG","autoBack: true!");
  12. }
  13. else {
  14. Log.d("TAG","autoBack: false!");
  15. }
  16. }
  17. }

  18. });
復制代碼

5. Preference 異地使用 即:PreferenceActivity 在一個應用程序 而別處應用程序可能也想改變該數據   怎麼做呢?

- 通過getSharedPreferences()  得到SharedPreferences實例

  1. spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.XML", MODE_WORLD_READABLE );
復制代碼

- 取值

  1. Boolean autoBack = spc.getBoolean("autoBack", false);
復制代碼

- 賦值

  1. public void putValue(String key, Boolean value){
  2. spe = spc.edit();
  3. spe.putBoolean(key, value);
  4. spe.commit();
  5. }
復制代碼

就這樣結束 似乎感覺不爽 所以決定加點料

- ListPreference 使用

  1. <ListPreference
  2. android:key="list1"
  3. android:title="android forum"
  4. android:summary="開發論壇"
  5. android:dialogTitle="請選擇論壇"
  6. android:entries="@array/entrIEs_list_preference"
  7. android:entryValues="@array/entrIEsvalue_list_preference"
  8. />
復制代碼
  1. <?XML version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string-array name="entrIEs_list_preference">
  4. <item>www.anddev.org</item>
  5. <item>www.eoeandroid.com</item>
  6. <item>developer.android.com</item>
  7. </string-array>
  8. <string-array name="entrIEsvalue_list_preference">
  9. <item>1</item>
  10. <item>2</item>
  11. <item>3</item>
  12. </string-array>
  13. </resources>
復制代碼

3.jpg



EditTextPreference 使用

  1. <EditTextPreference
  2. android:key="et1"
  3. android:title="EditTextPreference Sample"
  4. android:summary="點擊輸入"
  5. android:dialogTitle="輸入設置"
  6. android:defaultValue="Hello EditTextPreference"
  7. />
復制代碼

4.jpg

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved