Android ApiDemos示例解析(30):App->Preferences->Preferences from XML

我們在前面的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 介紹瞭可以使用Shared Preferences來存儲一些狀態,Shared Preferences更一般的用法是用來存儲一些應用程序偏好(設置)。 包android.preference 提供瞭很多類可以方便應用程序來顯示和設置應用相關的偏好。當然你可以使用自定義的UI來配置這些程序偏好。但使用android.preference中定義的類可以給用戶一個統一的UI (和Android本身的Settings一致)。
通常情況下,程序偏好使用單獨的Activity(派生於PreferenceActivity)來完成。在PreferenceActivity中,PreferenceScreen為Layout 的root element ,它可以包含其它如:CheckBoxPreference ,EditTextPreference, ListPreference ,PreferenceCategory或RingtonPreference. 使用Preference時所有程序偏好將會自動保存在應用程序的SharedPreferences中, 應用可以通過getSharedPreferences() 來訪問這些偏好設置。
• CheckBoxPreference 使用Checkbox 來顯示某個配置項。
• EditTextPreference 使用文本框來顯示某個牌子項,允許接受用戶輸入文本。
• ListPreference 使用一組單選鈕 (列表)可以從中選擇某一項。
• MultiSelectListPreference 使用一組Checkbox,允許該配置項有多值。
• RingtonPreference 允許用戶從選取某個鈴聲
這些類的基類為Preference ,以它為基類,也可以定義自定義的Preference.
• PreferenceGroup 可以為多個Preference定義一個組,PreferenceCategory, PreferenceScreen為它的子類。
• PreferenceCategory 同樣可以包含多個Preferneces ,如果該組被Disable時,可以提供一個標題。
• PreferenceScreen 為 Preferences層次結構的根元素,PreferenceScreen可以實現嵌套。內層的PreferenceScreen將會使用一個新的屏幕顯示,有點類似於Word中的分頁功能。
Preferences from XML 介紹瞭使用XML來定義應用程序偏好,並使用PreferenceActivity來顯示這個偏好。
R.xml.preferences的定義如下:
<PreferenceScreen
xmlns:android=”http://schemas.android.com/apk/res/android”>
<PreferenceCategory
android:title=”@string/inline_preferences”>
<CheckBoxPreference
android:key=”checkbox_preference”
android:title=”@string/title_toggle_preference”
android:summary=”@string/summary_toggle_preference” />
</PreferenceCategory>
<PreferenceCategory
android:title=”@string/dialog_based_preferences”>
<EditTextPreference
android:key=”edittext_preference”
android:title=”@string/title_edittext_preference”
android:summary=”@string/summary_edittext_preference”
android:dialogTitle=”@string/dialog_title_edittext_preference” />
<ListPreference
android:key=”list_preference”
android:title=”@string/title_list_preference”
android:summary=”@string/summary_list_preference”
android:entries=”@array/entries_list_preference”
android:entryValues=”@array/entryvalues_list_preference”
android:dialogTitle=”@string/dialog_title_list_preference” />
</PreferenceCategory>
<PreferenceCategory
android:title=”@string/launch_preferences”>
<!– This PreferenceScreen tag serves as a screen break (similar to page break
in word processing). Like for other preference types, we assign a key
here so it is able to save and restore its instance state. –>
<PreferenceScreen
android:key=”screen_preference”
android:title=”@string/title_screen_preference”
android:summary=”@string/summary_screen_preference”>
<!– You can place more preferences here that will be shown on the next screen. –>
<CheckBoxPreference
android:key=”next_screen_checkbox_preference”
android:title=”@string/title_next_screen_toggle_preference”
android:summary=”@string/summary_next_screen_toggle_preference” />
</PreferenceScreen>
<PreferenceScreen
android:title=”@string/title_intent_preference”
android:summary=”@string/summary_intent_preference”>
<intent android:action=”android.intent.action.VIEW”
android:data=”http://www.android.com” />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory
android:title=”@string/preference_attributes”>
<CheckBoxPreference
android:key=”parent_checkbox_preference”
android:title=”@string/title_parent_preference”
android:summary=”@string/summary_parent_preference” />
<!– The visual style of a child is defined by this styled theme attribute. –>
<CheckBoxPreference
android:key=”child_checkbox_preference”
android:dependency=”parent_checkbox_preference”
android:layout=”?android:attr/preferenceLayoutChild”
android:title=”@string/title_child_preference”
android:summary=”@string/summary_child_preference” />
</PreferenceCategory>
</PreferenceScreen>
 
而在代碼中使用addPreferencesFromResource(R.xml.preferences) 顯示出XML所定義的Preferences。
XML中根元素為PreferenceScreen.
CheckBoxPreference
PreferenceCategory定義該組配置的標題,CheckBoxPreference使用Checkbox來顯示該配置項。
<PreferenceCategory
android:title=”@string/inline_preferences”>
<CheckBoxPreference
android:key=”checkbox_preference”
android:title=”@string/title_toggle_preference”
android:summary=”@string/summary_toggle_preference” />
</PreferenceCategory>

 

EditTextPreference
EditTextPrefernece顯示一個文本框來接受用戶輸入:
<EditTextPreference
android:key=”edittext_preference”
android:title=”@string/title_edittext_preference”
android:summary=”@string/summary_edittext_preference”
android:dialogTitle=”@string/dialog_title_edittext_preference” />
 

ListPreference
顯示一組單選鈕。
<ListPreference
android:key=”list_preference”
android:title=”@string/title_list_preference”
android:summary=”@string/summary_list_preference”
android:entries=”@array/entries_list_preference”
android:entryValues=”@array/entryvalues_list_preference”
android:dialogTitle=”@string/dialog_title_list_preference” />

 

PreferenceScreen
使用新的屏幕顯示該應用程序偏好配置。
<PreferenceScreen
android:key=”screen_preference”
android:title=”@string/title_screen_preference”
android:summary=”@string/summary_screen_preference”>
<!– You can place more preferences here that will be shown on the next screen. –>
<CheckBoxPreference
android:key=”next_screen_checkbox_preference”
android:title=”@string/title_next_screen_toggle_preference”
android:summary=”@string/summary_next_screen_toggle_preference” />
</PreferenceScreen>

 

除瞭新起一個屏幕之外,PreferenceScreen也可以用來啟動一個Activity,下面定義啟動瀏覽器打開http://www.android.com。
<PreferenceScreen
android:title=”@string/title_intent_preference”
android:summary=”@string/summary_intent_preference”>
<intent android:action=”android.intent.action.VIEW”
android:data=”http://www.android.com” />
</PreferenceScreen>
最後一個例子表示可以定義Preference之間的依賴關系。子Preferences隻有在父Preference選中時才被Enable。
<PreferenceCategory
android:title=”@string/preference_attributes”>
<CheckBoxPreference
android:key=”parent_checkbox_preference”
android:title=”@string/title_parent_preference”
android:summary=”@string/summary_parent_preference” />
<!– The visual style of a child is defined by this styled theme attribute. –>
<CheckBoxPreference
android:key=”child_checkbox_preference”
android:dependency=”parent_checkbox_preference”
android:layout=”?android:attr/preferenceLayoutChild”
android:title=”@string/title_child_preference”
android:summary=”@string/summary_child_preference” />
</PreferenceCategory>

 

作者:mapdigit
 

發佈留言