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


前言:

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

使用之前,先介紹一下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

對於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定義的控件相同的使用方法)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM