Android学习笔记四十Preference使用
Preference直譯為偏好,博友建議翻譯為首選項(xiàng)。一些配置數(shù)據(jù),一些我們上次點(diǎn)擊選擇的內(nèi)容,我們希望在下次應(yīng)用調(diào)起的時(shí)候依舊有效,無須用戶再一次進(jìn)行配置或選擇。Android提供preference這個(gè)鍵值對(duì)的方式來處理這樣的情況,自己主動(dòng)保存這些數(shù)據(jù),并立時(shí)生效,同一時(shí)候Android提供一種類似的layout的方式來進(jìn)行Prefernce的布局。
一個(gè)簡單的Preferenece樣例
步驟1:編寫preference XML,在res/xml/下增加我們的preference XML文件,比如名字叫c21preference.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- preference的組織方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是帶層次組織關(guān)系,在后面的樣例體驗(yàn),而PreferenceScreen就是最平白和基礎(chǔ)的方式 -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
??? <!-- 有四個(gè)基本組建,這個(gè)樣例學(xué)習(xí)兩個(gè)。里面的內(nèi)容對(duì)比圖,非常easy理解,RingtonePreference是選擇鈴音,這里給出兩個(gè)選擇,系統(tǒng)默認(rèn)的鈴音和無聲 -->
??? <CheckBoxPreference android:key="checkbox"
?? ??? ?android:title="CheckBox Preference"
?? ??? ?android:summary="Check it on , check it off"/>
??? <RingtonePreference android:key="ringtone"
?? ??? ?android:title="Ringtone Preference"
?? ??? ?android:showDefault="true"
?? ??? ?android:showSilent="true"
?? ??? ?android:summary="Pick a tone, any tone"/>
</PreferenceScreen>
步驟2:在java源碼中調(diào)用該xml,生成對(duì)應(yīng)的preference界面
public class Chapter21Test1 extendsPreferenceActivity{
?? ?@Override
?? ?protected void onCreate(Bundle savedInstanceState) {
?? ???? super.onCreate(savedInstanceState);
?? ??? ?addPreferencesFromResource(R.xml.c21preference);
?? ?}
}
和用layout方式一樣,代碼非常easy。和以往界面最大的差別是,我們對(duì)checkbox進(jìn)行選擇或者對(duì)ringtone進(jìn)行選擇后,這個(gè)選擇結(jié)果是被保留的,當(dāng)我們退出actitvity后再次進(jìn)入,上次的選項(xiàng)依舊保留,我們又一次向模擬器load應(yīng)用,發(fā)現(xiàn)之前的選項(xiàng)仍然存在。我們能夠利用preference,而無須人工對(duì)數(shù)據(jù)進(jìn)行保存和讀取,非常是方便。
步驟3:獲取preference的數(shù)據(jù)
處了在preference的界面中可以保留數(shù)據(jù),我們也希望可以讀出數(shù)據(jù),以便這些數(shù)據(jù)可以用在其它的activity中。假設(shè)還有一個(gè)activity和這些數(shù)據(jù)關(guān)聯(lián),并且希望可以實(shí)時(shí)進(jìn)行同步,在onResume()中對(duì)preference保留的數(shù)據(jù)進(jìn)行讀取,而后進(jìn)行相關(guān)的更新。
首先要獲取preferences,然后通過鍵值對(duì)的獲取方式依據(jù)key獲取數(shù)值,在xml中checkbox的key為“checkbox”,值的類型為布爾值,而rintong的值為String,比如:
??? protected void onResume() { //在還有一個(gè)Activity中
?? ???? super.onResume();
?? ??? ?SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
?? ??? ?System.out.println(new Boolean(prefs.getBoolean("checkbox",false)).toString());//false表示沒有查到checkbox這個(gè)key的返回值
?? ??? ?System.out.println(prefs.getString("ringtone","<unset>"));//<unset>表示沒有查到ringtong這個(gè)key的返回值
?? ?}
獲取preferences能夠通過三種方式:
一、getPreferences():能夠獲取同一activity中的preference;
二、getSharedPreferences():能夠獲取映用級(jí)別的preferences(),在這個(gè)樣例中因?yàn)槲覀兎庋b在同一app中,也能夠使用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);當(dāng)中第一個(gè)參數(shù)name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():就是我們樣例的方式,通過Android的偏好管理器來獲取其所管理的preferences。
Preferenece數(shù)據(jù)的操作
在上面的樣例中,preference的數(shù)值會(huì)被保留,并且能夠在其它的activity中讀取。假設(shè)須要清除數(shù)據(jù),能夠通過remove()清除某個(gè)名字的prefernece,clear()清除全部的preferences。我們能夠通過edit()獲取preferences的editor,進(jìn)而進(jìn)行編輯,改動(dòng)后,通過commit()將改動(dòng)值保存。
Preferenece XML
Preference的XML能夠通過PreferenceCategory來進(jìn)行組織。PreferenceCategory能夠?qū)讉€(gè)組建組合在一起,并加上標(biāo)題。我們依舊用前面的xml樣例,通過PreferenceCategory來進(jìn)行組織,例如以下:和之前的樣例比較,將chekcbox和rintong組織成為一個(gè)category,并加上了"simple Preferences"的標(biāo)題。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
? ??? ?<PreferenceCategory android:title="Simple Preferences">
?? ???????? <CheckBoxPreference android:key="checkbox" ..../>
?? ???????? <RingtonePreference android:key="ringtone" ... />
? ???? </PreferenceCategory>
</PreferenceScreen>
PreferenceCategory也能夠嵌套PreferenceScreen,PreferenceScreen中的內(nèi)容,將通過還有一屏來顯示,我們?cè)谏厦鏄永竺婕尤胍粋€(gè)嵌套了PreferenceScreen的PreferenceCategory。整個(gè)PreferenceScreen作為一個(gè)組件出現(xiàn),點(diǎn)擊后新的一屏,由入PreferenceScreen定義。通過這個(gè)關(guān)系,我們能夠組織自己的preference架構(gòu)。
| <?xml version="1.0" encoding="utf-8"?> |
在前面的樣例中我們使用了CheckBox和Ringtong,在以下的樣例,我們實(shí)驗(yàn)另外的兩個(gè)組建EditText和List,這兩種都是已彈框的方式。在上面的樣例我們繼續(xù)添加內(nèi)容
| <?xml version="1.0" encoding="utf-8"?> | 在list中由兩個(gè)引用@array/cities和@array/airport_codes,我們?cè)谫Y源文件里定義此兩array。內(nèi)容例如以下: |
執(zhí)行結(jié)果如右圖所看到的。對(duì)于EditText,鍵值對(duì)保存的值是String,即用戶在輸入框中輸入的內(nèi)容。List的情況略微復(fù)雜一些,在設(shè)置ListPreference的屬性有一個(gè)entires,這是在List顯示給用戶看的內(nèi)容,假設(shè)我們?nèi)カ@取preference的值,在這個(gè)樣例為prefs.getString("list", "<unset>");,則返回在entryValues相應(yīng)的數(shù)值,比如我們選擇了第一個(gè)item:Pittsburgh,則獲取的值為PHL。entries和entryValues是一一相應(yīng)的。
相關(guān)鏈接: 我的Android開發(fā)相關(guān)文章
轉(zhuǎn)載于:https://www.cnblogs.com/blfshiye/p/4557317.html
總結(jié)
以上是生活随笔為你收集整理的Android学习笔记四十Preference使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Java在Linux or Andr
- 下一篇: [android] AndroidMan