PreferenceActivity 全接觸

來源:互聯網
上載者:User

 

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

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

所以 現在有更好的選擇了 那就是本文的主角:PreferenceActivity

從名字應該可以看出 其實 Activity 與 Perference 的混合物

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

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

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

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

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

鑒於PreferenceActivity使用 網路很多 故此略過 為了給自己備份 防止以後用到 大致敘述一下

[代碼 步驟]

1. PreferenceActivity 介面比較特別 在 res/xml/setting.xml

Java代碼

  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>
<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference            android:key="autoBack"            android:title="自動回複"            android:summaryOn="開啟"            android:summaryOff="關閉"            android:defaultValue="true"        />            <PreferenceCategory android:title="SMS 助手">    <CheckBoxPreference                android:key="smsSilence"                android:title="靜音"                android:summaryOn="開啟"                android:summaryOff="關閉"                android:defaultValue="false"            />        <PreferenceScreen android:title="更多選項">            <CheckBoxPreference                android:key="cb21"                android:title="功能1"                android:summaryOn="開啟"                android:summaryOff="關閉"                android:defaultValue="true"            />            <CheckBoxPreference                android:key="cb22"                android:title="功能2"                android:summaryOn="使用"                android:summaryOff="停用"                android:defaultValue="true"            />        <ListPreference        android:key="list1"        android:title="android forum"        android:summary="開發論壇"        android:dialogTitle="請選擇論壇"        android:entries="@array/entries_list_preference"        android:entryValues="@array/entriesvalue_list_preference"    />    <EditTextPreference        android:key="et1"        android:title="EditTextPreference Sample"        android:summary="點擊輸入"        android:dialogTitle="輸入設定"        android:defaultValue="Hello EditTextPreference"    />        </PreferenceScreen>    </PreferenceCategory>        <PreferenceCategory android:title="其他選項">    <RingtonePreference        android:key="rt1"        android:title="RingtonePreference Sample"        android:summary="選擇鈴聲"    />    </PreferenceCategory></PreferenceScreen>

2. 匯入setting.xml

Java代碼

  1. addPreferencesFromResource(R.xml.settings);
addPreferencesFromResource(R.xml.settings);

emulator 運行:

點開"更多選項"

具體 請大家自己嘗試之

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

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

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

- 得到SharedPreferences 控制代碼

Java代碼

  1. sp = PreferenceManager.getDefaultSharedPreferences(this);
sp = PreferenceManager.getDefaultSharedPreferences(this);

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

Java代碼

  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. });
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){@Override//sharedPreferences:控制代碼//key: 改變 索引值public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {// TODO Auto-generated method stub                        if(key.equals("autoBack")){            Boolean autoBack = sharedPreferences.getBoolean("autoBack", false);            if(autoBack){            Log.d("TAG","autoBack: true!");            }            else {            Log.d("TAG","autoBack: false!");            }            }}                        });

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

- 通過getSharedPreferences() 得到SharedPreferences執行個體

Java代碼

  1. spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml", MODE_WORLD_READABLE );
spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml", MODE_WORLD_READABLE );

- 取值

Java代碼

  1. Boolean autoBack = spc.getBoolean("autoBack",
    false);
Boolean autoBack = spc.getBoolean("autoBack", false);

- 賦值

Java代碼

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

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

- ListPreference 使用

Java代碼

  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. />
<ListPreference        android:key="list1"        android:title="android forum"        android:summary="開發論壇"        android:dialogTitle="請選擇論壇"        android:entries="@array/entries_list_preference"        android:entryValues="@array/entriesvalue_list_preference"    />

- EditTextPreference 使用

Java代碼

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.