最近忙着搞項目,可貴有時間,便來整理搞項目中學習到的知識java
使用以前,先介紹一下android這種的五種數據儲存方式,分別爲文件儲存,SharePrefence,SQL,使用ContentProvider存儲數據,網絡存儲數據,其中,SharePrefence是一個輕量的儲存,主要是用來儲存app的相關設置,設置界面就是使用的這種儲存方式android
想要深刻了解的請看下面的參考博文瀏覽器
按照以往,咱們建立界面的時候,是用的xml佈局+activity文件,設置界面也是與之相似網絡
切換到Project模式,新建一個xml文件夾,用來放設置界面的佈局文件app
在xml文件夾中新建一個xml文件ide
命名的話以pref_xxx形式,官方的命名規範就是以pref爲前綴命名的佈局
打開xml文件,能夠發現與咱們以前寫佈局文件是同樣的,有design模式和text模式,這裏咱們能夠看到有七種能夠選擇,我只講解EditTextPreference和SwitichPreference學習
須要詳解的能夠參考這一篇Android:詳解如何建立Google風格的SettingsActivity - 簡書url
結合上面的兩張圖片,我講解一下相關的屬性spa
defaultValue是默認值,
key相似於咱們寫layout文件中定義的id,咱們能夠經過id找到控件,一樣的,在這裏,咱們也能夠經過key能夠找到控件
summary就是開通會員下面的那一行字
title就是標題,也就是開通會員
EditViewPreference 這個是封裝了EditView的一個控件,當咱們點擊的時候,會彈出一個對話框讓咱們輸入數據,當咱們輸入數據以後,數據就會保存在SharePreference之中
同理,switch是一個開關,點擊的時候會將true或者false保存在SharePreference中
若是咱們只是想弄一個選項,點擊會打開一個瀏覽器,上面的控件均不合適,咱們怎麼辦呢?不知道你注意到沒有,最外層使用的是PreferenceScreen
咱們能夠像上圖之中這樣使用PreferenceScreen,以後在java代碼之中能夠爲它設置監聽器,跳轉到瀏覽器
key能夠定義在sting.xml中,固然,也能夠直接設置
因爲咱們這個是設置界面,因此不須要想正常的fragment那樣使用,因此將三個選項都取消
首先咱們要修改fragment,使其繼承PreferenceFragment
以後,在onCreate方法中添加一行代碼,使用addPreferenceFromResource方法綁定以前的設置界面的xml
若是以前有使用過fragment的,應該知道咱們只能在onViewCreated方法中來找控件
這裏經過key來找到設置界面的控件
調用靜態方法getDefaultSharedPreference來得到sharePreference,以後經過get方法來獲取以前保存的數值
這裏須要說起一下,本來的SharedPreference中能夠保存int boolean String等類型的數據,可是,若是像咱們這裏使用設置來保存app設置的相關數據,sharedPreference只有兩種數據,一種是String,另一種則是boolean,若是想要int,須要將得到的String轉換爲int類型
找到控件以後,咱們能夠調用相關的方法爲其設置監聽器來實現相關的功能
咱們須要新建一個activity文件,其佈局須要一個framelayout
以後,咱們經過Fragment的方法動態添加設置fragment
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.setting_framlayout,settingFragment).commit();
學過fragment的話,應該知道,咱們使用Fragment的時候,有兩個包給咱們選擇,一個是v4包,另一個則是app包,使用v4包的那個fragment能夠得到更好的兼容性(低版本)
因此這裏須要注意,使用的fragment是app包的Fragment,剛開始我使用的v4包,一直出錯,查找緣由以後,發現了,以前settingFragment繼承的是PreferenceFragment,而PreferenceFragment繼承的則是app包下的Fragment
經過setEnable方法(對象爲控件)能夠禁用控件(若是設置密碼鎖的話能夠使用此方法)
能夠將Preference轉型爲相關的對象,如Preference能夠轉爲EditTextPreference,或者能夠轉爲SwitchPreference,以後就能夠調用相關的對象的方法(與原來的在xml定義的控件相同的使用方法)