PreferenceActivity(首选项设置页)
一、PreferenceActivity簡(jiǎn)介
一直都以為軟件的設(shè)置界面都是作者自己寫的,今天才發(fā)現(xiàn)有個(gè)現(xiàn)成的PreferenceActivity可以使用,非常方便。大家都應(yīng)該知道絕大多數(shù)應(yīng)用都有選項(xiàng)頁(yè)面,這里指的選項(xiàng)頁(yè)面絕大多數(shù)使用過PreferenceActivity繼承下來(lái)的(當(dāng)然,如果你牛逼你也可以自己寫)。如果你還不知道什么是Preference,請(qǐng)移步(http://blog.csdn.net/plussoft/article/details/9152573)。與其它偏好設(shè)置相同的,PreferenceActivity生成的信息也是用XML儲(chǔ)存的。另外值得注意的是,通過PreferenceActivity生成的XML文件,命名方式是定死了的,生成的XML文件在data/data/<工程名>/shared_prefs/下,名字為“<工程名>_Preference.xml”,這是無(wú)法改變的。正式因?yàn)槿绱?#xff0c;PreferenceActivity生成的XML也被稱為全局設(shè)置、應(yīng)用設(shè)置,有著至高無(wú)上的地位。在PreferenceActivity中,所有的修改都會(huì)自動(dòng)更新該XML文件,不需要我們手動(dòng)去設(shè)置大量的監(jiān)聽。另外,我們還有必要復(fù)習(xí)一下各種獲取SharedPreferences的方式:
一、getPreferences():可以獲取當(dāng)前Activity中的preference,這個(gè)方法我沒用過(主要是沒搞懂);
二、PreferenceManager.getDefaultSharedPreferences():顧名思義,獲取全局變量的Preferences,也就是PreferenceActivity生成的Preference;
三、getSharedPreferences():可以獲取該應(yīng)用中全部的preferences,也就是在(http://blog.csdn.net/plussoft/article/details/9152573)所提到的。前面兩種方法都是基于該方法的。
回到PreferenceActivity。為了簡(jiǎn)化與preference相關(guān)的應(yīng)用開發(fā),android為我們提供了一系列的api來(lái)幫助我們。在PreferenceActivity中,給我們提供了四個(gè)選項(xiàng)集成控件:ListPreference,EditTextPreference,CheckBoxPreference和RingtonePreference。如果還不能夠滿足你,那你唯有自行開發(fā)了。另外,RingtonePreference在此不做介紹,個(gè)人感覺真沒什么用——有什么應(yīng)用會(huì)要用到你的鈴聲呢?下面開始展示PreferenceActivity的獨(dú)有魅力。
二、ListPreference
先來(lái)看看最終效果圖:
功能不多闡述。來(lái)看看MainActivity代碼:
package com.plusjun.preference;import android.os.Bundle; import android.preference.PreferenceActivity;/** 要記得是繼承PreferenceActivity而不是Activity*/ public class MainActivity extends PreferenceActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 放入設(shè)置版面文件* 在這里,R.xml.mylistperference可以看作是布局文件*//** addPreferencesFromResource方法在Android3.0中就被棄用了* 但卻沒有替代方法* 谷歌的想法是,希望我們繼承PreferenceFragment來(lái)實(shí)現(xiàn)默認(rèn)選項(xiàng)頁(yè)* 但是這太難了。真的*/addPreferencesFromResource(R.xml.mylistperference);} }res/xml/mylistperference.xml布局文件
<?xml version="1.0" encoding="utf-8"?> <!-- 對(duì)于該文件需要注意以下幾點(diǎn)第一:位置。該文件的位置是在res/xml/下的。第二:格式,PreferenceScreen為根標(biāo)簽,ListPreference為子標(biāo)簽。PreferenceScreen可以看作是一個(gè)大的框架第三:標(biāo)簽屬性含義android:key 唯一標(biāo)識(shí)符,和android:id相類似,PreferenceManager可以以其為參數(shù)通過findPreference獲取指定的preference注意,這個(gè)android:key的值也是Preference文件里面的XML“鍵”名android:title 大標(biāo)題android:summary 標(biāo)題下面的小字(這個(gè)要作為選項(xiàng)卡才有)android:entries 彈出的對(duì)話框中,列表顯示的文本內(nèi)容,注意哦,這里指定的是一個(gè)數(shù)組哦android:entryValues 與android:entries相對(duì)應(yīng)的值android:defaultValue 當(dāng)對(duì)應(yīng)值不存在時(shí)的默認(rèn)值android:dialogTitle 彈出的對(duì)話框中的標(biāo)題信息更多的標(biāo)簽設(shè)置等你來(lái)發(fā)掘--> <PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"android:key="screen_list"android:title="標(biāo)題"android:summary="說明摘要"><ListPreferenceandroid:key="myListPreference"android:title="標(biāo)題"android:summary="說明摘要"android:entries="@array/list_entries"android:entryValues="@array/list_entries_value"android:dialogTitle="這里是彈出框"android:defaultValue="@string/deflault_list_entries_value"></ListPreference></PreferenceScreen>
我們的數(shù)據(jù)來(lái)源是在strings.xml文件中,這是一種良好的變成習(xí)慣。當(dāng)然了,不一定要strings.xml文件,你可以自定義文件,但是不能有相同的標(biāo)簽。
在strings.xml中添加一下代碼段:
<string-array name="list_entries_value"><item>shandong</item><item>fujian</item><item>beijing</item><item>hebei</item></string-array><string-array name="list_entries"><item>山東</item><item>福建</item><item>北京</item><item>河北</item></string-array><string name="deflault_list_entries_value">beijing</string>在data/data/<工程名>/shared_prefs/下,名字為“<工程名>_Preference.xml“文件中,內(nèi)容如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="myListPreference">fujian1</string> </map>
由此可見,android:key="myListPreference"正是XML中的鍵名,值為我們選擇的值。
三、CheckBoxPreference
效果如下:
我們繼續(xù)拿上一個(gè)項(xiàng)目來(lái)修改。MainActivity仍保持不變:
package com.plusjun.preference;import android.os.Bundle; import android.preference.PreferenceActivity;public class MainActivity extends PreferenceActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.mylistperference);} }res/xml/checkbox.xml布局文件
最終在“<工程名>_Preference.xml“生成的文件內(nèi)容:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="medf" value="true" /> <boolean name="mlqs" value="false" /> </map>顯然,CheckBoxPreference要比ListPreference簡(jiǎn)單多了。
四、EditTextPreference
效果圖如下:
當(dāng)我們點(diǎn)擊主頁(yè)面的輸入名稱時(shí),就會(huì)彈出該對(duì)話框,讓我們輸入文字。
MainActivity仍保持不變:
res/xml/checkbox.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:key="edittext_screen"android:summary="屏幕簡(jiǎn)要說明"android:title="屏幕標(biāo)題" ><EditTextPreferenceandroid:dialogTitle="輸入您的名稱:"android:key="editWord"android:defaultValue="im human"android:summary="簡(jiǎn)要說明"android:title="輸入名稱" ></EditTextPreference></PreferenceScreen>
五、Preferences分組
目的很明顯的,就是為了更美觀。把不同類型的選項(xiàng)進(jìn)行歸類,提高用戶體驗(yàn)。
首先第一種,就是制造二(多)級(jí)頁(yè)面。只有點(diǎn)進(jìn)去才會(huì)看到詳細(xì)選項(xiàng),如圖:
MainActivity仍保持不變,res/xml/checkbox.xml:
可以看出,PreferenceScreen本質(zhì)上就是一個(gè)層次標(biāo)簽。
如果我們首選項(xiàng)的數(shù)目較少,但是我們依舊想為他們分組下,怎么辦呢?
我們可以將上面代碼中的嵌套PreferenceScreen改為PreferenceCategory,就這么簡(jiǎn)單!代碼就不上了,效果如下:
以上部分內(nèi)容轉(zhuǎn)載或參考來(lái)源如下:
http://www.eoeandroid.com/thread-5305-1-1.html
http://www.pocketdigi.com/20110405/231.html
http://blog.csdn.net/flowingflying/article/details/6671548
http://blog.csdn.net/chenzheng_java/article/details/6285966
http://blog.csdn.net/chenzheng_java/article/details/6286037
http://blog.csdn.net/chenzheng_java/article/details/6286115
http://blog.csdn.net/chenzheng_java/article/details/6286195
在此表示感謝。
轉(zhuǎn)載請(qǐng)注明來(lái)源,版權(quán)歸原作者所有,未經(jīng)同意嚴(yán)禁用于任何商業(yè)用途。
微博:http://weibo.com/theworldsong
郵箱:theworldsong@foxmail.com
總結(jié)
以上是生活随笔為你收集整理的PreferenceActivity(首选项设置页)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 用css怎么实现两端对齐?
- 下一篇: [js] 纯函数和函数式编程有什么关系