當我們的應用需要保存用戶設置信息的時候,你可能會想到用之後學習過的Activity+Preference來完成,前者用於界面構建 後者用於保存用戶的設置信息。這理論上來講這是可行的,但是實際操作起來卻是一件很繁瑣的事情,特別是當設置項較多的時候, 每個設置選項都要建立與其對應的Preference,還要即時保存用戶設置的改變。其實Android已經爲我們提供了用於設置界面的組件,那就是PreferenceActivity。Android系統本身就大量用到了PreferenceActivity來對系統進行信息配置和管理,比如Android系統中的設置。下面我們模擬Android中的網絡設置,運行效果如下:
1、如何創建一個PreferenceActivity?
我們藉助Eclipse可以很方便的創建PreferenceActivity,新建一個工程,然後添加一個Android xml文件,這裏需要選擇的是Preference而不是layout或其他,當我們輸入名稱後可以在res/xml下找到你新建的xml文件。接着我們可以通過可視化的結構設計或者xml源碼設計添加設置項。下面是我們這個例子中的設置項信息:
1 |
<? xml version = "1.0" encoding = "utf-8" ?> |
9 |
android:summary = "使用3G雖可提高數據載入速度,但可能會降低電池壽命" |
10 |
android:title = "啓用3G" /> |
13 |
android:summaryOff = "打開蜂窩數據" |
14 |
android:summaryOn = "關閉蜂窩數據" |
15 |
android:title = "蜂窩數據" /> |
18 |
android:key = "set_2g_net" |
19 |
android:title = "蜂窩數據網絡" /> |
22 |
android:key = "set_roving" |
23 |
android:summary = "在境外時請關閉數據漫遊" |
24 |
android:title = "數據漫遊" /> |
27 |
android:key = "set_VPN_Category" |
28 |
android:title = "VPN設置" > |
31 |
android:title = "設置VPN" /> |
那麼如果顯示呢?然後我們創建一個Activity繼承自PreferenceActivity類即可。代碼如下:
1 |
package com.liuzhichao.sharedpreferences; |
3 |
import android.os.Bundle; |
4 |
import android.preference.PreferenceActivity; |
6 |
public class SharedPreferencesDemoActivity extends PreferenceActivity { |
9 |
public void onCreate(Bundle savedInstanceState) { |
10 |
super .onCreate(savedInstanceState); |
12 |
addPreferencesFromResource(R.xml.netsetting); |
運行工程,效果即是我們之前的那張效果圖。
2、PreferenceActivity元素說明
我們在新建的setting.xml裏按Alt+/ 可以看到PreferenceActivity中的元素如下:
- CheckBoxPreference:CheckBox選擇項,對應的值的ture或flase
- EditTextPreference:輸入編輯框,值爲String類型,會彈出對話框供輸入。
- ListPreference: 列表選擇,彈出對話框供選擇。
- Preference:只進行文本顯示,需要與其他進行組合使用。
- PreferenceCategory:用於分組。
- PreferenceScreen:PreferenceActivity的根元素
- RingtonePreference:系統玲聲選擇。
- PrefeneceActivity都提供了哪幾種元素可供使用
常見屬性說明:
title:顯示的標題
key:唯一標識(至少在同一程序中是唯一),SharedPreferences也將通過此Key值進行數據保存,也可以通過key值獲取保存的信息
summary:副標題、說明(小字體顯示)
defaultValue:默認值(當然,此處只能是true或false了)
android:summaryOn:屬性開啓的時候的說明
android:summaryOff:屬性關閉時候的說明
dialogTitle:彈出對話框的標題
entries:列表中顯示的值。爲一個數組,通讀通過資源文件進行設置。
entryValues:列表中實際保存的值,也entries對應。爲一個數組,通讀通過資源文件進行設置。