Android之PreferenceActivity

http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html?

?看到很多書中都沒有對PreferenceActivity做介紹,而我正好又在項目中用到,所以就把自己的使用的在這總結一下,也方便日后查找。

PerferenceActivity是什么,看下面的截圖:

image????????????image

Android系統截圖(左)??????????????? MusicPlayer Setting截圖(右)

???????? 好了,我們看到Android系統本身就大量用到了PreferenceActivity來對系統進行信息配置和管理,那么它是怎么保存數據的呢,如何創建PrefenceActivity的呢,更關鍵是怎樣觸發相應事件的呢。

???????? 先看第一個問題,PreferenceActivity是如何保存的數據。對Android系統了解的都知道,Android系統有四種基本的數據保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvider。看出來了吧,Preference,對就是使用SharedPreferneces以鍵值對的形式進行保存的,當然,我們也可以通過SharedPreferences來獲取PreferenceActivity設置的值。

?

???????? 第二個問題:如何創建一個PreferenceActivity。 其實Eclipse提供了相應的創建工具,和創建Layout是基本相同的。步驟如下:

??????? 創建Android項目,并添加一個Android xml文件。注意,這次選擇的不是Layout,而是Preference,而且注意Folder路徑是 res/xml.

?????????????image

添加完成之后,在res/xml/下打開添加的preference.xml文件。可以看到Android也為我們提供兩種編輯模式,可視化的結構設計及xml源碼設計。推薦使用structure進行創建。如圖所示:

???????image

下面我們看看PrefeneceActivity都提供了哪幾種元素可供使用。點擊Add按鈕,在打開的新窗口中可以看到以下幾項:

??????????????image

CheckBoxPreference:CheckBox選擇項,對應的值的ture或flase。如圖:

????????????image

EditTextPreference:輸入編輯框,值為String類型,會彈出對話框供輸入。

image?

ListPreference: 列表選擇,彈出對話框供選擇。

image?

Preference:只進行文本顯示,需要與其他進行組合使用。

???????????image

PreferenceCategory:用于分組。效果如下:

??????????image

PreferenceScreen:PreferenceActivity的根元素,必須為它。

?

RingtonePreference:系統玲聲選擇。

?????????image

OK,Preferenc的基本元素介紹完畢,下一節將使用它們創建一個完整的Preference并進行顯示。

-------------------------------------------------------------------------------

分析MusicPlayer Setting,第一部分為“我的位置”,包括“使用無線網線”和“使用GPS”兩個部分,而且都是CheckBox,根據上節學習,應該包括一個PreferenceCategory和兩個CheckBoxPreference。

Xml代碼:

<PreferenceCategory android:title="我的位置" android:key="set_local"><CheckBoxPreference android:key="apply_wifi"android:summary="使用無線網絡在應用程序(例如Google地圖)中查看位置" 
                android:title="使用無線網絡" android:defaultValue="true"></CheckBoxPreference><CheckBoxPreference android:key="apply_gps"android:summary="定位到街道級別(需要消耗更多的電量以及天氣允許)" 
                android:title="使用GPS"></CheckBoxPreference>
</PreferenceCategory>

以上代碼當然也可以用Android提供的IDE工具直接生成。視頻結構如下:

??????image?
PreferenceCategory屬性分析:

???????? title:顯示的標題

???????? key:唯一標識(至少在同一程序中是唯一),SharedPreferences也將通過此Key值進行數據保存,也可以通過key值獲取保存的信息 (以下相同)。

CheckBoxPreference屬性分析:

??????? Key:唯一標識.

??????? title:顯示標題(大字體顯示)

?????? summary:副標題(小字體顯示)

?????? defaultValue:默認值(當然,此處只能是true或false了)

?

Preference.xml的第二部分為“無線和網絡設置”,此部分包括的內容比較多,也稍微復雜,一步一步來分析。

xml代碼:

<PreferenceCategory android:title="無線和網絡設置"><CheckBoxPreference android:key="apply_fly"android:summary="禁用所有無線連接" android:title="飛行模式"></CheckBoxPreference><CheckBoxPreference android:key="apply_internet"android:summary="禁用通過USB共享Internet連接"
                android:title="Internet共享"></CheckBoxPreference><CheckBoxPreference android:key="apply_wifi"android:summary="打開Wi-Fi" android:title="Wi-Fi"></CheckBoxPreference><Preference android:summary="設置和管理無線接入點" android:title="Wi-Fi設置"android:dependency="apply_wifi" android:key="wifi_setting"></Preference><CheckBoxPreference android:key="apply_bluetooth"android:summary="啟用藍牙" android:title="藍牙"></CheckBoxPreference><Preference android:summary="管理連接、設備設備名稱和可檢測性"android:title="藍牙設置" android:dependency="apply_bluetooth"android:key="bluetooth_setting"></Preference><EditTextPreference android:key="number_edit"android:title="輸入電話號碼"></EditTextPreference><ListPreference android:title="部門設置" android:entries="@array/department"android:entryValues="@array/department_value" 
                        android:dialogTitle="選擇部門"android:key="depart_value"></ListPreference><RingtonePreference android:ringtoneType="all" android:title="玲聲" 
                            android:showDefault="true" android:key="ring_key"
                            android:showSilent="true"></RingtonePreference>
</PreferenceCategory>

對應的Structure圖:

?????????image

第二部分中前三個都為CheckBoxPreference,不心多說,從<Preference?android:key="bluetooth_setting"/>開始。

Preference屬性分析:

?????? Key:唯一標識.

??????? title:顯示標題(大字體顯示)

?????? summary:副標題(小字體顯示)

???? dependency:附屬(嘛意思),即標識此元素附屬于某一個元素(通常為CheckBoxPreference),dependency值為所附屬元素的key。上面代碼中的Preference元素附屬于key等于“apply_bluetooth”的CheckPreference元素,當CheckPreference值為true時,Preference則為可用,否則為不可用。

?

EditTextPreperence屬性分析:

??? Key:唯一標識.

???? title:顯示標題(大字體顯示)

ListPreference屬性分析:

?? Key:唯一標識.

?? title:顯示標題(大字體顯示)

? dialogTitle:彈出對話框的標題

?entries:列表中顯示的值。為一個數組,通讀通過資源文件進行設置。

entryValues:列表中實際保存的值,也entries對應。為一個數組,通讀通過資源文件進行設置。以下代碼顯示的是arrays.xml文件中內容:

<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>

RingtonePreference :玲聲(暫時沒有用到過),暫時略過。

OK,Preference.xml內容已經分析完畢,屬性都大致相同,相信親自動力一試也就那么回事。那么如何把Preference.xml中內容展現出來呢?

Layout是通過繼續自Activity的類來進行顯示的,前面提到過,PreferenceActivity是專門用于顯示preference的,所以只要創建一個繼承自PreferenceActivity類即可。代碼如下:?

public class Setting extends PreferenceActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 所的的值將會自動保存到SharePreferencesaddPreferencesFromResource(R.xml.preference);}
}

?

接下來就是運行程序,顯示勞動成果。至此,工作已經完成大半,所有的值都會保存到SharedPreferences中,我們也可以讀取到保存的結果。

還有一個重要的問題,就是如何響應PreferenceActivity的操作。其實只要重寫PreferenceActivity的 onPreferenceTreeClick的方法就可以了,通過參數preference來判斷是對那一個元素進行的,并根據需要進行操作。

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference) {return false;
}

?

Ok,到此關于PreferenceActvity的想關內容就完了,日后有什么重大發現會補上。

轉載于:https://www.cnblogs.com/zsw-1993/archive/2012/09/25/4880858.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377189.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺談算法和數據結構: 七 二叉查找樹

前文介紹了符號表的兩種實現&#xff0c;無序鏈表和有序數組&#xff0c;無序鏈表在插入的時候具有較高的靈活性&#xff0c;而有序數組在查找時具有較高的效率&#xff0c;本文介紹的二叉查找樹(Binary Search Tree&#xff0c;BST)這一數據結構綜合了以上兩種數據結構的優點。…

scala部分應用函數_Scala中的部分函數

scala部分應用函數Scala部分功能 (Scala partial functions) A partial function is a function that returns values only for a specific set of values i.e. this function is not able to return values for some input values. This function is defined so that only som…

《MySQL——備庫多線程復制策略。》

目錄備庫并行復制能力MySQL5.6版本 并行復制策略MariaDB 并行復制策略MySQL5.7版本 并行復制策略MySQL5.7.22版本 并行復制策略總結備庫并行復制能力 主要涉及兩個方面的并行度&#xff1a; 1、客戶端寫入主庫的能力 2、備庫上sql_thread執行中轉日志relay log 1的并行能力…

人臉是門大生意

我們正處在一個新時代的入口。人有70%的能量是被大腦消耗&#xff0c;大腦90%的能量用來處理視覺信息&#xff0c;人臉則承載了絕大部分的視覺信息。我們要討論的是一個比Google Glass更酷的世界。文/程苓峰-云科技網易郵箱的用戶已經可以用人臉而不是密碼來驗證登陸。安卓4.0實…

【SQL】sql版Split函數。用于拆分字符串為單列表格

【SQL】sql版Split函數。用于拆分字符串為單列表格 功能與.net版string.Split函數類似&#xff0c;只不過.net返回的是數組&#xff0c;這個返回的是一個單列表格&#xff0c;每個拆分出來的子串占一行。可選是否移除空格子串和重復項。市面上類似的函數不算少&#xff0c;但大…

線描算法

線描算法 (Line drawing algorithms) The equation for a straight line is ymxb 直線方程為y mx b In this m represent a slope of a line which can be calculated by the my2-y1/x2-x1 where (x1, y1) are the starting position of the points and (x2, y2) are the end…

為移動端網頁構造快速響應按鈕

背景 在谷歌&#xff0c;我們不斷地推測手機網頁應用的可能性。像HTML5這樣的技術使我們網頁版的應用以及運行在手機設備上的原生應用。而這些技術的成就之一就是我們開發了一種新的創建按鈕的方法&#xff0c;使按鈕的響應時間遠遠快于一般的HTML按鈕。在此之前的按鈕或者其他…

Red Gate系列之一 SQL Compare 10.4.8.87 Edition 數據庫比較工具 完全破解+使用教程

Red Gate系列之一 SQL Compare 10.4.8.87 Edition 數據庫比較工具 完全破解使用教程 Red Gate系列文章&#xff1a; Red Gate系列之一 SQL Compare 10.4.8.87 Edition 數據庫比較工具 完全破解使用教程 Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 數據庫版本控制…

《MySQL——基于位點orGTID的主備切換協議》

一主多從的設置&#xff0c;用于讀寫分離&#xff0c;主庫負責所有的寫入和一部分讀&#xff0c;其他讀請求則由從庫分擔。 一主多從架構下&#xff0c;主庫故障后的主備切換問題。相比于一主一備&#xff0c;多了從庫指向新主庫的過程。 基于位點的主備切換同步 把節點B設…

數據科學和統計學_數據科學中的統計

數據科學和統計學統計 (Statistics) Statistics are utilized to process complex issues in reality with the goal that Data Scientists and Analysts can search for important patterns and changes in Data. In straightforward words, Statistics can be utilized to ge…

java隨機數生成(固定位數)

隨機生成 a 到 b (不包含b)的整數:(int)(Math.random()*(b-a))a; 隨機生成 a 到 b (包含b)的整數:(int)(Math.random()*(b-a1))a;轉載于:https://www.cnblogs.com/zhwl/p/3624726.html

POJ 3670 Eating Together

POJ_3670 由于遞增和遞減是類似的&#xff0c;下面不妨只討論變成遞增序列的情況。 由于Di只有三個數&#xff0c;所以可以考慮將序列分割成三部分&#xff0c;第一部分全部變成1&#xff0c;第二部分全部變成2&#xff0c;第三部分全部變成3。然后我們枚舉3開始的位置&#xf…

《MySQL——如何解決一主多從的讀寫分離的過期讀問題》

目錄兩種架構兩種架構特點強制走主庫方案Sleep方案判斷主備無延遲方案配合semi-sync等主庫位點方案GTID方案兩種架構 基于一主多從的讀寫分離&#xff0c;如何處理主備延遲導致的讀寫分離問題。 讀寫分離的主要目標&#xff1a;分攤主庫壓力。 有兩種架構&#xff1a; 1、客…

json/ 發送形式_24/7的完整形式是什么?

json/ 發送形式24/7&#xff1a;二十四 (24/7: Twenty-Four Seven) 24/7 or 24-7 service, which generally marked "twenty-four seven" is service that is existing at any time and typically, every day in trade business and industry. Substitute orthograph…

《MySQL tips:并發查詢與并發連接區別》

并發連接與并發查詢&#xff0c;并不是一個概念。 在執行show processlist的結果里&#xff0c;看到了幾千個連接&#xff0c;指的是并發連接。 而"當前正在執行"的語句&#xff0c;才是并發查詢。 并發連接數多影響的是內存。 并發查詢太高對CPU不利。一個機器的…

對上拉下拉電阻的作用作個總結(想了解的過來看看)(轉載)

轉自&#xff1a;http://www.amobbs.com/thread-5475279-1-3.html 一、定義&#xff1a;上拉就是將不確定的信號通過一個電阻嵌位在高電平&#xff01;電阻同時起限流作用&#xff01;下拉同理&#xff01;上拉是對器件注入電流&#xff0c;下拉是輸出電流&#xff1b;弱強只是…

給用戶傳入的變量進行轉義操作

先看代碼實現&#xff1a; /* 對用戶傳入的變量進行轉義操作。*/ if (!get_magic_quotes_gpc()) {if (!empty($_GET)){$_GET addslashes_deep($_GET);}if (!empty($_POST)){$_POST addslashes_deep($_POST);}$_COOKIE addslashes_deep($_COOKIE);$_REQUEST addslashes_…

《MySQL——外部檢測與內部統計 判斷 主庫是否出現問題》

目錄select1判斷查表判斷更新判斷外部檢測弊端內部統計一主一備的雙M架構里&#xff0c;主備切換只需要把客戶端流量切換到備庫。 在一主多從的架構里&#xff0c;主備切換要把客戶端流量切換到備庫&#xff0c;也需要把從庫接到新主庫上。 切換有兩種場景&#xff1a;1、主動…

NIM的完整形式是什么?

NIM&#xff1a;無內部消息 (NIM: No Internal Message) NIM is an abbreviation of "No Internal Message". NIM是“無內部消息”的縮寫。 It is an expression, which is commonly used in the Gmail platform. It is written in the subject of the mail, if the…

[Json] C#ConvertJson|List轉成Json|對象|集合|DataSet|DataTable|DataReader轉成Json (轉載)...

點擊下載 ConvertJson.rar 本類實現了 C#ConvertJson|List轉成Json|對象|集合|DataSet|DataTable|DataReader轉成Json|等功能大家先預覽一下 請看代碼 /// <summary> /// 類說明&#xff1a;Assistant /// 編 碼 人&#xff1a;蘇飛 /// 聯系方式&#xff1a;361983679 …