安卓Preference詳解
發表時間:2020-10-19
發布人:葵宇科技
浏覽次數:193
Preference 用來治理應用法度榜樣的偏好設置和(hé)包管應用這些的每個(gè)應用法度榜樣的所有參數 擁有同樣的方法和(hé)用戶體驗 并且體系和(hé)其他應用法度榜樣的UI保持偏一緻。
一個(gè)應用法度榜樣的偏好部分應作為一個(gè)自力的晃蕩擴大preferenceactivity類 類中(zhōng)的對象應當是preferencescreen ,preferencescreen包含偏好等元素的構造的根元素 比如(rú)checkboxpreference
EditTextPreference
, ListPreference
, PreferenceCategory
, RingtonePreference
.對于一個(gè)給定的偏好設置将主動(dòng)保存到SharedPreferences , 拿到SharedPreferences應用實例的很簡單getsharedpreferences();值的留意的是保存首選項隻能由創建的應用法度榜樣去操作。
一般設置對應的UI如(rú)圖
[img]http://img.blog.csdn.net/20150105225901589?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
android 3.0以下(xià)版本,必須應用PreferenceActivity類來構建。 高于或等于android 3.0版本 應用PreferenceFragment。當然設備屏幕如(rú)不雅足夠大年夜的話照樣可(kě)以應用PreferenceActivity創建雙面闆構造來顯示多組設置
安卓給我們供給了一下(xià)接口:
Preference.OnPreferenceChangeListener
接口定義一個(gè)回調時調用的值Preference由用戶改變了,是嗎 關(guān)于設置和(hé)/或持久化。
Preference.OnPreferenceClickListener
接口定義一個(gè)回調時被調用Preference是 點擊。
PreferenceManager.OnActivityDestroyListener
接口定義一個(gè)類時,将調用容器(qì)的晃蕩 被摧毀。
PreferenceManager.OnActivityResultListener
接口定義一個(gè)類時,将調用容器(qì)的晃蕩 接收到一個(gè)晃蕩的結不雅。
PreferenceManager.OnActivityStopListener
接口定義一個(gè)類時,将調用容器(qì)的晃蕩 是停止了。
也定義了如(rú)下(xià)api:
CheckBoxPreference
一個(gè)Preference供給checkbox小部件 功能。
DialogPreference
一個(gè)基類Preference對象 基于對話框的。
EditTextPreference
一個(gè)Preference許可(kě)字符串 輸入。
ListPreference
一個(gè)Preference顯示條目标列表 一個(gè)對話框。
Preference
代表的根本UI構建的偏好 塊顯示的PreferenceActivity的情勢ListView。
Preference.BaseSavedState
一個(gè)基類來治理實例的狀況Preference。
preferenceactivity
顯示了一個(gè)層次Preference對象作為 列表,可(kě)能跨越多個(gè)屏幕。
PreferenceCategory
用于集團Preference對象 并供給一個(gè)殘疾人标題膳绫擎。
PreferenceGroup
一個(gè)容器(qì)為多個(gè)Preference對象。
PreferenceManager
用于贊助創建Preference層次構造 大年夜晃蕩或XML。
PreferenceScreen
代表一個(gè)頂級Preference那 是優先的層次構造的根。
RingtonePreference
一個(gè)Preference許可(kě)用戶選擇大年夜這些設畢喔贍鈴聲。
1 Preference 可(kě)實現的接口
裝載請标明出處::http://blog.csdn.net/sk719887916
2.Preference元素的通(tōng)用XML Attributes:
android:key : key:獨一标識,SharedPreferences也精曉過此Key值進行數據保存,也可(kě)以經由過程key值獲取保存的信息 。
android:defaultValue : 默認值。 例如(rú),CheckPreference的默認值可(kě)為”true”,默認為選中(zhōng)狀況。
android:enabled : 表示該Preference是否可(kě)用狀況。
android:title : 每個(gè)Preference在PreferenceScreen構造上顯示的标題——大年夜标題
android:summary : 每個(gè)Preference在PreferenceScreen構造上顯示的标題——小标題(可(kě)以沒有)
android:persistent: 表示Preference元素所對應的值是否寫入sharedPreferen文(wén)件中(zhōng),如(rú)不雅是true,則表示寫入;不然,則表示不寫入該Preference元素的值。
android:layout: 在一個(gè)preferenceactivity的偏好構造 用于填充view
android:dependency: 表示一個(gè)Preference(用A表示)的可(kě)用狀況依附别的一個(gè)Preference(用B表示)。B可(kě)用,
則A可(kě)用;B弗采取,則A弗采取。
android:icon: 偏好擱筆 對于偏浩揭捉擇擱筆必須是一個(gè)引用到另一個(gè)資(zī)本的情勢或以packagetypename 主題屬性.
android:disableDependentsState: 與android:dependency相反。B可(kě)用,則A弗采取;B弗采取,則A可(kě)用。
android:order:表示偏好次序,對于偏好較低的值的次序是先點如(rú)不雅不指定默認的排序将字母必須是一個(gè)整數,如(rú)100,這也可(kě)能是一個(gè)參考值在含有這類這相當于全局屬性資(zī)本符号秩序的情勢或 情勢packagetypename主題屬性的一個(gè)資(zī)本。
android:shouldDisableView:是否被禁用,這種偏好是必須是布爾值true或false 這也可(kě)能是一個(gè)參考的情勢或主題屬性packagetypename資(zī)本,packagetypename情勢包含一個(gè)值 相當于全局屬性資(zī)本符号shoulddisableview相幹辦法
android:selectable:偏好是否是可(kě)選的。
android:widgetLayout:可(kě)以做小清晨件部分的構造。android:fragment: 應用時,可(kě)以碎片化PreferenceActivity。
3.顯示Preference構造構造的辦法為:
使我們的Activity持續PreferenceActivity,然後在onCreate()辦法中(zhōng)經由過程
addPreferencesFromResource(R.xml.custom_preference) (我們自定義的Preference 構造)。
怎麼樣,是不是似曾了解?稍後會用一個(gè)Demo來為您胪陳。
常用的方軌則包含:
getKey() setKey()
getSummary() setSummary()
getText() setText()
getXXX()代表取得xxx屬性的值。
一個(gè)簡略單純的效不雅圖如(rú)下(xià):
[img]http://img.blog.csdn.net/20150105232642680?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
4.Preference的跳轉:
辦法一:在設備每個(gè)Preference元素節點時,我們可(kě)以顯示為點擊它時所跳轉的Intent。點擊該Preference,跳轉至目标Intent。除非在onPreferenceTreeClick()辦法中(zhōng)進行決定。在xml中(zhōng)設備如(rú)下(xià):
</pre><pre name="code" class="java" style="font-size: 14px; color: rgb(34, 34, 34);">1.<Preference android:key="wifi_setting" android:title="Wi-Fi設置" 2. android:summary="設置和(hé)治理無線接入點" android:dependency="apply_wifi"> 3. <!-- 點擊時 自定義一個(gè)默認跳轉Intent action指定隐式Intent --> 4. <!-- action指定隐式Intent ; targetPackage和(hé)targetClass指定顯示Intent--> 5. <intent android:action="com.feixun.action.seemAction" 6. android:targetPackage="com.feixun.qin" android:targetClass="com.feixun.qin.MainActivity" /> 7.</Preference>
8. android:key 獨一标識符。它對應保存的XML保存的設備文(wén)件中(zhōng)的節點的 name屬性
9. android:defaultValue 默認值,對應XML中(zhōng)的Value屬性的值。
10.
辦法二:可(kě)以在onPreferenceTreeClick()創建新的intent顯示的進行跳轉。
接下(xià)來,對每個(gè)Preference的的獨有XML Attributes和(hé)辦法進行一下(xià)總結,使大年夜家有更好的深刻懂得。
1、EditPreference
可(kě)輸入的設置項
辦法:
getEditText() 返回的是我們在該控件中(zhōng)輸入的文(wén)本框值
getText() 返回的是我們之前sharedPreferen文(wén)件保存的值
2、ListPreference
多選對話框設置項
XML Attributes:
android:dialogTitle:彈出控件對話框時顯示的标題
android:entries:類型為array,控件欲顯示的文(wén)本
android:entryValues:類型為array,與文(wén)本相對應的key-value鍵值對,value保存至sharedPreference文(wén)件
解釋:entries和(hé)entryValue屬性應用的數組為定義在資(zī)本文(wén)件arrays.xml的數組名:
辦法:
CharSequence[] getEntries(): 返回的是控件顯示文(wén)本的一個(gè)”key”數組,對應于屬性android:entries
CharSequence[] getEntryValues():返回的一個(gè)”value”數組,對應于屬性android: entryValues
CharSequence getEntry(): 返回當前選擇文(wén)本
String getValue() :返回當前選中(zhōng)文(wén)本選中(zhōng)的value 。
其實用法和(hé)對選對話框一緻 隻不過做了保存設置。
采取的數組為:
entries:列表中(zhōng)顯示的值。為一個(gè)數組,通(tōng)讀經由過程資(zī)本文(wén)件進行設置。
entryValues:列表中(zhōng)實際保存的值,也entries對應。為一個(gè)數組,通(tōng)讀經由過程資(zī)本文(wén)件進行設置。以下(xià)代碼顯示的是arrays.xml文(wén)件中(zhōng)内容:
<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>
3 CheckBoxPreference
可(kě)點擊的設置項
4 dialogPreference
彈出一個(gè)對話框 用戶選擇肯定和(hé)撤消
重點:分析Preference事宜
以下(xià)摘自收集:
------------------------------------------------------------------------------------
★在PreferenceActivity辦法中(zhōng),一個(gè)比較重要的監聽點擊事宜辦法為:
public booleanonPreferenceTreeClick (PreferenceScreen preferenceScreen, Preference preference)
說 明 : 當Preference控件被點擊時,觸發該辦法。
參數解釋: preference 點擊的對象。
返回值: true 代表點擊事宜已成功捕獲,無須履行默認動(dòng)作或者返回上層調用鍊。 例如(rú),不跳轉至默認Intent。
false 代表履行默認動(dòng)作并且返回上層調用鍊。例如(rú),跳轉至默認Intent。
在我們持續PreferenceActivity的Activity可(kě)以重寫該辦法,來完成我們對Preference事宜的捕獲。
信賴經由過程前面的介紹,你(nǐ)必定知道了若何應用了Preference家族并且對其觸發辦法。下(xià)面我們抛出别的兩枚炸彈——
Preference相幹的兩個(gè)重要監聽接口。
★ Preference.OnPreferenceChangeListener 該監聽器(qì)的一個(gè)重要辦法如(rú)下(xià):
boolean onPreferenceChange(Preference preference,Object objValue)
解釋: 當Preference的元素值發送改變時,觸發該事宜。
返回值:true 代表将新值寫入sharedPreference文(wén)件中(zhōng)。
false 則不将新值寫入sharedPreference文(wén)件
★ Preference.OnPreferenceClickListener 該監聽器(qì)的一個(gè)重要辦法如(rú)下(xià):
public booleanonPreferenceClick(Preference preference)
解釋:當點擊控件時觸發産生,可(kě)以做響應操作。
那麼當一個(gè)Preference控件實現這兩個(gè)接口時,當被點擊或者值産生改變時,觸發辦法是若何履行的呢(ne)?事實上,
它的觸發規矩如(rú)下(xià):
1 先調用onPreferenceClick()辦法,如(rú)不雅該辦法返回true,則不再調用onPreferenceTreeClick辦法 ;
如(rú)不雅onPreferenceClick辦法返回false,則持續調用onPreferenceTreeClick辦法。
2 onPreferenceChange的辦法自力與其他兩種辦法的運行。也就是說,它老是會運行。
彌補:點擊某個(gè)Preference控件後,會先回調onPreferenceChange()辦法,等于否保存值,然後再回調onPreferenceClick以及onPreferenceTreeClick()辦法,是以在onPreferenceClick/onPreferenceTreeClick
辦法中(zhōng)我們獲得的控件值就是最新的Preference控件值。
那麼,開端我們的拭魅戰之旅吧! 下(xià)面給您最火熱的┞方場。
1,新建我們的preference.xml文(wén)件。
① 在res文(wén)件夾下(xià),新建xml文(wén)件夾。
② 在新建的xml文(wén)件夾下(xià),新建Android XML File。定名為mypeference.xml 。類型選擇為Preference。
③ 打開我們的mypeference.xml,視圖選擇Structure。可(kě)以手動(dòng)設備我們的構造文(wén)件。可(kě)選的Preference空間如(rú)下(xià):
導出的xml文(wén)件:yourpageName"_prefenrences.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="Apply_wireless" value=http://www.sjsjw.com/100/000217MYM022474/"false" />123@baidu.com android.widget.EditText@41a45c00
------------------------------------------------------------------------------------------------------------------------------
二、PreferenceFragment
PreferenceFragment可(kě)以在一屏幕放上多個(gè)SharedPreferences片段。實現多屏構造顯示 ,pad用的居多 效不雅如(rú)下(xià)。
[img]http://img.blog.csdn.net/20150105234203343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
用于顯示層次構造的偏好對象列表 這些列表的選項将主動(dòng)保存到SharedPreferences作為與用戶交互以檢索實例,在該片段SharedPreferences偏好的層次構造用默認的 sharedpreferences去拿值。
此外所示的偏好将遵守體系偏好視覺風格很輕易創建一個(gè)層次構造光鮮的偏好,可(kě)以顯示在多個(gè)屏幕上經由過程XML設備,因為這些原因,建議應用此片段作為一個(gè)父類的處理SharedPreferences。
PreferenceFragment偏好層次可(kě)以以多種方法形成。
@ 大年夜XML文(wén)件中(zhōng)指定的層次構造
@ 大年夜不合的晃蕩,可(kě)以指定本身的愛好 經由過程 XML文(wén)件的
Activity
meta-data中(zhōng)。
@年腋荷瑣對象層次構造植根于preferencescreen.
應用addpreferences 參加要展示的xml, xml可(kě)以給根元素添加一個(gè)子(zǐ)元素,顯示一個(gè)充斥屏幕的preferencescreen ,其xml可(kě)以如(rú)許寫。
代碼示例:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="顯示一排偏好"> <CheckBoxPreference android:key="checkbox_preference" android:title="開關(guān)" android:summary="@string/summary_checkbox_preference" /> </PreferenceCategory> <PreferenceCategory android:title="這是對畫框偏好"> <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"> <!--這個(gè)标簽作為一個(gè)屏幕preferencescreen打破類似于分頁符在字處理像其他偏好類型我們分派一個(gè)關(guān)鍵在這裡可(kě)以或許很好的保存和(hé)恢複它的實例的狀況. 就是所謂的同屬一個(gè)一樣的類别<pre name="code" class="java" style="color: rgb(34, 34, 34); font-size: 14px; line-height: 19px;"><span style="font-family: Roboto, sans-serif;">--></span><PreferenceScreen android:key="screen_preference" android:title="@string/title_screen_preference" android:summary="@string/summary_screen_preference"> <!-- 你(nǐ)可(kě)以定義更多的Preference,将鄙人一屏幕上顯示. 點擊的時刻這個(gè)類别會充斥屏幕 -->
<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.sjsjw.com/100/000217MYM022474/"http://www.android.com" />
<!-- 可(kě)以定義一個(gè)子(zǐ)sp 包含本身視覺風格和(hé)主題的 以下(xià)倆個(gè)子(zǐ)選項屬于同一個(gè)類别--><CheckBoxPreference android:key="parent_checkbox_preference" android:title="@string/title_parent_preference" android:summary="@string/summary_parent_preference" /> <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>
具體顯示如(rú)圖所示:
[img]http://img.blog.csdn.net/20150106000445806?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
java 代碼可(kě)以如(rú)許寫;
public static class PrefsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 加載構造 addPreferencesFromResource(R.xml.preferences); } }包含如(rú)下(xià)幾個(gè)辦法:
1 要指定添加一個(gè)意圖可(kě)以應用:
addPreferencesFromResource (int preferencesResId)
2 每個(gè)意圖可(kě)以指定清單中(zhōng)的元數據經由過程Key來獲取子(zǐ)Preference ,
Preference findPreference (CharSequence key)
3 獲取根preferencescreen:
PreferenceScreen getPreferenceScreen ()
4 設置一個(gè)滿屏的Preference
setPreferenceScreen (PreferenceScreen preferenceScreen)
其他生命會周期和(hé)activty的一模一樣不做細說3 PreferenceGroup
一種Preference的父類,如(rú)preferencecategory, preferencescreen 做基類容器(qì)。構造辦法有以下(xià)三種,具體請看viewgroup的源代碼 觸類旁通(tōng),這裡不做細說
public PreferenceGroup (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
Added in API level 21
public PreferenceGroup (Context context, AttributeSet attrs, int defStyleAttr)
Added in API level 1
public PreferenceGroup (Context context, AttributeSet attrs)
4 RingtonePreference
作為鈴聲設置,(調用體系的鈴聲設置)
android:ringtoneType:響鈴的鈴聲類型,重要有:ringtone(音樂(yuè))、notification(通(tōng)知)、alarm(鬧鈴)(今後樓主為具體介紹alarm類)
、all(所有可(kě)用聲 音類型)。
android:showDefault :默認鈴聲,可(kě)以應用體系(布爾值---true,false)的或者自定義的鈴聲
android:showSilent :指定鈴聲是否為靜音。指定鈴聲包含體系默認鈴聲或者自定義的鈴聲
5 SwitchPreference
類似閣下(xià)開關(guān)的設置項,可(kě)以作為一個(gè)滑動(dòng)開關(guān)
6 TwoStatePreference
有兩個(gè)可(kě)選狀況偏好合營基類 和(hé)SharedPreferences布爾值和(hé)可(kě)能相幹的偏好,enabled 和(hé)disabled基于當前選中(zhōng)的狀況來
經由過程這邊文(wén)┞仿大年夜家可(kě)以大年夜概懂得了Preference,今後本身的應用法度榜樣的設置頁面可(kě)以采取安卓自帶的Preference,不僅做到和(hé)系同一樣ui體驗,也能便利同一治理,并且包管參數情勢一緻。裝載請标明出處:http://blog.csdn.net/sk719887916