Android開發——設置界面的建立

前言:

最近忙着搞項目,可貴有時間,便來整理搞項目中學習到的知識java

使用以前,先介紹一下android這種的五種數據儲存方式,分別爲文件儲存,SharePrefence,SQL,使用ContentProvider存儲數據,網絡存儲數據,其中,SharePrefence是一個輕量的儲存,主要是用來儲存app的相關設置,設置界面就是使用的這種儲存方式android

想要深刻了解的請看下面的參考博文瀏覽器

Android 數據存儲五種方式使用與總結 - CSDN博客

使用:

按照以往,咱們建立界面的時候,是用的xml佈局+activity文件,設置界面也是與之相似網絡

第一步:建立xml文件夾

切換到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

對於Android 3.0如下的應用,咱們須要在 Activity 中顯示設置,應當擴展 PreferenceActivity 類。這是傳統 Activity 類的擴展,該類根據 Preference 對象的層次結構顯示設置列表。當用戶進行更改時,PreferenceActivity 會自動保留與每一個 Preference 相關的設置。對 Android 3.0 及 更高版本系統的應用,則應改成使用 PreferenceFragment。與僅使用上述 Activity 相比,不管在構建何種 Activity,Fragment均可爲應用提供一個更加靈活的體系結構。
如今來講,最低版本都是android4.0了,咱們就直接拋棄之前的方法,使用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定義的控件相同的使用方法)

相關文章
相關標籤/搜索