前言:
最近忙着搞項目,難得有時間,便來整理搞項目中學習到的知識
使用之前,先介紹一下android這種的五種數據儲存方式,分別為文件儲存,SharePrefence,SQL,使用ContentProvider存儲數據,網絡存儲數據,其中,SharePrefence是一個輕量的儲存,主要是用來儲存app的相關設置,設置界面就是使用的這種儲存方式
想要深入了解的請看下面的參考博文
Android 數據存儲五種方式使用與總結 - CSDN博客
使用:
按照以往,我們創建界面的時候,是用的xml布局+activity文件,設置界面也是與之類似
第一步:創建xml文件夾
切換到Project模式,新建一個xml文件夾,用來放設置界面的布局文件

第二步:編寫布局文件
在xml文件夾中新建一個xml文件

命名的話以pref_xxx形式,官方的命名規范就是以pref為前綴命名的
打開xml文件,可以發現與我們之前寫布局文件是一樣的,有design模式和text模式,這里我們可以看到有七種可以選擇,我只講解EditTextPreference和SwitichPreference
需要詳解的可以參考這一篇Android:詳解如何創建Google風格的SettingsActivity - 簡書


結合上面的兩張圖片,我講解一下相關的屬性
defaultValue是默認值,
key類似於我們寫layout文件中定義的id,我們可以通過id找到控件,同樣的,在這里,我們也可以通過key可以找到控件
summary就是開通會員下面的那一行字
title就是標題,也就是開通會員
EditViewPreference 這個是封裝了EditView的一個控件,當我們點擊的時候,會彈出一個對話框讓我們輸入數據,當我們輸入數據之后,數據就會保存在SharePreference之中
同理,switch是一個開關,點擊的時候會將true或者false保存在SharePreference中
如果我們只是想弄一個選項,點擊會打開一個瀏覽器,上面的控件均不合適,我們怎么辦呢?不知道你注意到沒有,最外層使用的是PreferenceScreen


我們可以像上圖之中這樣使用PreferenceScreen,之后在java代碼之中可以為它設置監聽器,跳轉到瀏覽器
key可以定義在sting.xml中,當然,也可以直接設置
第三步:創建Fragment
新建一個Fragment
由於我們這個是設置界面,所以不需要想正常的fragment那樣使用,所以將三個選項都取消

首先我們要修改fragment,使其繼承PreferenceFragment

之后,在onCreate方法中添加一行代碼,使用addPreferenceFromResource方法綁定之前的設置界面的xml

如果之前有使用過fragment的,應該知道我們只能在onViewCreated方法中來找控件
這里通過key來找到設置界面的控件
調用靜態方法getDefaultSharedPreference來獲得sharePreference,之后通過get方法來獲取之前保存的數值
這里需要提及一下,原本的SharedPreference中可以保存int boolean String等類型的數據,但是,如果像我們這里使用設置來保存app設置的相關數據,sharedPreference只有兩種數據,一種是String,另外一種則是boolean,如果想要int,需要將獲得的String轉換為int類型

找到控件之后,我們可以調用相關的方法為其設置監聽器來實現相關的功能
第四步:動態添加在framelayout中
我們需要新建一個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定義的控件相同的使用方法)
