Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android PerferenceActivity用法

Android PerferenceActivity用法

編輯:Android開發實例

看到很多書中都沒有對PreferenceActivity做介紹,而我正好又在項目中用到,所以就把自己的使用的在這總結一下,也方便日後查找。

PerferenceActivity是什麼,看下面的截圖:

           

Android系統截圖(左)                MusicPlayer Setting截圖(右)

         好了,我們看到Android系統本身就大量用到了PreferenceActivity來對系統進行信息配置和管理,那麼它是怎麼保存數據的呢,如何創建PrefenceActivity的呢,更關鍵是怎樣觸發相應事件的呢。

 

         先看第一個問題,PreferenceActivity是如何保存的數據。對Android系統了解的都知道,Android系統有四種基本的數據保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvider。看出來了吧,Preference,對就是使用SharedPreferneces以鍵值對的形式進行保存的,當然,我們也可以通過SharedPreferences來獲取PreferenceActivity設置的值。

 

         第二個問題:如何創建一個PreferenceActivity。 其實Eclipse提供了相應的創建工具,和創建Layout是基本相同的。步驟如下:

        創建Android項目,並添加一個Android xml文件。注意,這次選擇的不是Layout,而是Preference,而且注意Folder路徑是 res/xml.

            

添加完成之後,在res/xml/下打開添加的preference.xml文件。可以看到Android也為我們提供兩種編輯模式,可視化的結構設計及xml源碼設計。推薦使用structure進行創建。如圖所示:

      

下面我們看看PrefeneceActivity都提供了哪幾種元素可供使用。點擊Add按鈕,在打開的新窗口中可以看到以下幾項:

             

CheckBoxPreference:CheckBox選擇項,對應的值的ture或flase。如圖:

           

EditTextPreference:輸入編輯框,值為String類型,會彈出對話框供輸入。

 

ListPreference: 列表選擇,彈出對話框供選擇。

 

Preference:只進行文本顯示,需要與其他進行組合使用。

          

 

 

 

 

 

 

 

PreferenceCategory:用於分組。效果如下:

         

PreferenceScreen:PreferenceActivity的根元素,必須為它。

 

RingtonePreference:系統玲聲選擇。

        

OK,Preferenc的基本元素介紹完畢,下一節將使用它們創建一個完整的Preference並進行顯示。

-------------------------------------------------------------------------------

分析MusicPlayer Setting,第一部分為“我的位置”,包括“使用無線網線”和“使用GPS”兩個部分,而且都是CheckBox,根據上節學習,應該包括一個PreferenceCategory和兩個CheckBoxPreference。

Xml代碼:

 

<PreferenceCategory android:title="我的位置" android:key="set_local">
	<CheckBoxPreference android:key="apply_wifi"
		android:summary="使用無線網絡在應用程序(例如Google地圖)中查看位置" 
                android:title="使用無線網絡" android:defaultValue="true">
	</CheckBoxPreference>
	<CheckBoxPreference android:key="apply_gps"
		android:summary="定位到街道級別(需要消耗更多的電量以及天氣允許)" 
                android:title="使用GPS">
	</CheckBoxPreference>
</PreferenceCategory>

 

以上代碼當然也可以用Android提供的IDE工具直接生成。視頻結構如下:

     
PreferenceCategory屬性分析:

         title:顯示的標題

         key:唯一標識(至少在同一程序中是唯一),SharedPreferences也將通過此Key值進行數據保存,也可以通過key值獲取保存的信息 (以下相同)。

CheckBoxPreference屬性分析:

        Key:唯一標識.

        title:顯示標題(大字體顯示)

       summary:副標題(小字體顯示)

       defaultValue:默認值(當然,此處只能是true或false了)

 

Preference.xml的第二部分為“無線和網絡設置”,此部分包括的內容比較多,也稍微復雜,一步一步來分析。

xml代碼:

<PreferenceCategory android:title="無線和網絡設置">
	<CheckBoxPreference android:key="apply_fly"
		android:summary="禁用所有無線連接" android:title="飛行模式">
	</CheckBoxPreference>
	<CheckBoxPreference android:key="apply_internet"
		android:summary="禁用通過USB共享Internet連接"
                android:title="Internet共享">
	</CheckBoxPreference>
	<CheckBoxPreference android:key="apply_wifi"
		android:summary="打開Wi-Fi" android:title="Wi-Fi">
	</CheckBoxPreference>
	<Preference android:summary="設置和管理無線接入點" android:title="Wi-Fi設置"
		android:dependency="apply_wifi" android:key="wifi_setting">
	</Preference>
	<CheckBoxPreference android:key="apply_bluetooth"
		android:summary="啟用藍牙" android:title="藍牙">
	</CheckBoxPreference>
	<Preference android:summary="管理連接、設備設備名稱和可檢測性"
		android:title="藍牙設置" android:dependency="apply_bluetooth"
		android:key="bluetooth_setting">
	</Preference>
	<EditTextPreference android:key="number_edit"
		android:title="輸入電話號碼">
	</EditTextPreference>
	<ListPreference android:title="部門設置" android:entries="@array/department"
			android:entryValues="@array/department_value" 
                        android:dialogTitle="選擇部門"
			android:key="depart_value">
	</ListPreference>
	<RingtonePreference android:ringtoneType="all" android:title="玲聲" 
                            android:showDefault="true" android:key="ring_key"
                            android:showSilent="true">
	</RingtonePreference>
</PreferenceCategory>


 

對應的Structure圖:

        

第二部分中前三個都為CheckBoxPreference,不心多說,從<Preference android:key="bluetooth_setting"/>開始。

Preference屬性分析:

       Key:唯一標識.

        title:顯示標題(大字體顯示)

       summary:副標題(小字體顯示)

     dependency:附屬(嘛意思),即標識此元素附屬於某一個元素(通常為CheckBoxPreference),dependency值為所附屬元素的key。上面代碼中的Preference元素附屬於key等於“apply_bluetooth”的CheckPreference元素,當CheckPreference值為true時,Preference則為可用,否則為不可用。

 

EditTextPreperence屬性分析:

    Key:唯一標識.

     title:顯示標題(大字體顯示)

ListPreference屬性分析:

   Key:唯一標識.

   title:顯示標題(大字體顯示)

  dialogTitle:彈出對話框的標題

 entries:列表中顯示的值。為一個數組,通讀通過資源文件進行設置。

entryValues:列表中實際保存的值,也entries對應。為一個數組,通讀通過資源文件進行設置。以下代碼顯示的是arrays.xml文件中內容:

<resources>
	<string-array name="department">
		<item>綜合部</item>
		<item>行政部</item>
		<item>外貿部</item>
	</string-array>
	<string-array name="department_value">
		<item>001</item>
		<item>002</item>
		<item>003</item>
	</string-array>
</resources>

RingtonePreference :玲聲(暫時沒有用到過),暫時略過。

OK,Preference.xml內容已經分析完畢,屬性都大致相同,相信親自動力一試也就那麼回事。那麼如何把Preference.xml中內容展現出來呢?

Layout是通過繼續自Activity的類來進行顯示的,前面提到過,PreferenceActivity是專門用於顯示preference的,所以只要創建一個繼承自PreferenceActivity類即可。代碼如下:
 

public class Setting extends PreferenceActivity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 所的的值將會自動保存到SharePreferences
		addPreferencesFromResource(R.xml.preference);
	}
}

 

接下來就是運行程序,顯示勞動成果。至此,工作已經完成大半,所有的值都會保存到SharedPreferences中,我們也可以讀取到保存的結果。

還有一個重要的問題,就是如何響應PreferenceActivity的操作。其實只要重寫PreferenceActivity的 onPreferenceTreeClick的方法就可以了,通過參數preference來判斷是對那一個元素進行的,並根據需要進行操作。

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
		Preference preference) {
	return false;
}

 

Ok,到此關於PreferenceActvity的想關內容就完了,日後有什麼重大發現會補上。

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