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