Android PreferenceScreen的使用和详解(设置页面)
PreferenceScreen是設(shè)置選項(xiàng)的配置文件,一般用在設(shè)置頁面,用來當(dāng)前的狀態(tài)是保存在。該狀態(tài)無須用戶處理,存在SharedPreferences中。
1.如何使用
1.1布局文件的創(chuàng)建
PreferenceScreen的用法和layout的類似,都是通過xml文件來管理的,但是PreferenceScreen的布局需要自己去創(chuàng)建
在/main/res/xml夾下新建preferences.xml文件,文件的根布局PreferenceScreen節(jié)點(diǎn)。
配置如下
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><SwitchPreferenceCompatapp:key="notifications"app:title="Enable message notifications" /><Preferenceapp:key="feedback"app:summary="Report technical issues or suggest new features"app:title="Send feedback" /><SwitchPreferenceapp:key="SwitchPreference"app:title="SwitchPreference" /><CheckBoxPreferenceandroid:key="CheckBoxPreference"app:title="CheckBoxPreference" /><ListPreferenceapp:key="ListPreference"android:entries="@array/mode_80211_selection_entries"android:entryValues="@array/mode_80211_selection_values"app:title="ListPreference" /></PreferenceScreen>布局的預(yù)覽
PreferenceScreen支持以下幾種:
1.ListPreference: 2.DropDownPreference 3.CheckBoxPreference 4.SwitchPreference 5.SwitchPreferenceCompat 6.EditTextPreference 7.MultiSelectListPreference 8.Preference 9.PreferenceCategory 10.PreferenceScreen 11.SeekBarPreference2.使用:
我們知道了PreferenceScreen大概,接下來介紹如何使用
2.1Preference的屬性
<Preferenceapp:key="feedback"app:summary="Report technical issues or suggest new features"app:title="Send feedback" />?由于前面說過,Preference狀態(tài)存儲(chǔ)在SharedPreferences中,所以,每個(gè)Preference都必須有一個(gè)key,這樣方便狀態(tài)存儲(chǔ),如果當(dāng)前key沒有設(shè)置,在后期的熟悉操作,可能會(huì)存在報(bào)錯(cuò),如果報(bào)錯(cuò)key is null,設(shè)置一個(gè)key即可。
key:指定一個(gè)key
? ? java.lang.IllegalArgumentException: Key cannot be null
title:標(biāo)題
summary:標(biāo)題下方的內(nèi)容
layout:可以嵌入一個(gè)layout,覆蓋當(dāng)前view的信息,title或者其他都不會(huì)顯示,只顯示layout
icon:左側(cè)的圖標(biāo)
2.ListPreference
<ListPreferenceandroid:entries="@array/arry_entries"android:entryValues="@array/arry_values"app:key="ListPreference"app:summary="summary"app:title="ListPreference" />entries:顯示的item
entryValues:內(nèi)部值
這兩個(gè)是數(shù)組,核心是key和value對(duì)應(yīng)關(guān)系,數(shù)據(jù)長度一致,否則會(huì)出問題
Preference preference = getPreferenceScreen().getPreference(0); if (preference instanceof ListPreference) {ListPreference listPreference = (ListPreference) preference;String val = listPreference.getValue();listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {if (preference instanceof ListPreference) {//把preference這個(gè)preference強(qiáng)制轉(zhuǎn)化為listpreference類型ListPreference listpreference = (ListPreference) preference;//獲取listpreference中的實(shí)體內(nèi)容CharSequence[] entries = listpreference.getEntries();CharSequence[] entVal = listpreference.getEntryValues();//獲取listpreference中的實(shí)體內(nèi)容的下標(biāo)值int index = listpreference.findIndexOfValue((String) newValue);//把listpreference中的摘要顯示為當(dāng)前l(fā)istpreference的實(shí)體內(nèi)容中選擇的那個(gè)項(xiàng)目listpreference.setSummary(entries[index] + "=" + entVal[index]);}return true;}});點(diǎn)擊獲取對(duì)應(yīng)的值
3.DropDownPreference:
下拉選擇,和list的相似,但是list是彈窗。下拉的話會(huì)比較丑
?DropDownPreference的配置和ListPreference一樣,只是,ListPreference是dialog的彈窗展示,DropDownPreference的是一個(gè)recycleview的adapter,都是繼承DialogPreference。
?這個(gè)顯示可以自己定義。
內(nèi)部Adapter數(shù)據(jù)添加:
3.CheckBoxPreference
CheckBox是勾選,多了一個(gè)開和關(guān)的狀態(tài)
<CheckBoxPreferenceapp:key="CheckBoxPreference"app:title="CheckBoxPreference"app:summary="CheckBoxPreference"app:summaryOff="summaryOff"app:summaryOn="summaryOn"/>?app:summaryOn的優(yōu)先級(jí)大于app:summary,如果設(shè)置了on和off的summary,原來的summary將被覆蓋了
4.SwitchPreference
開關(guān),和原來Switch的控件一樣使用,
<SwitchPreferenceapp:title="SwitchPreference"app:summary="summary"app:summaryOff="summaryOff"app:summaryOn="summaryOn"/>用法和CheckBox一樣。
5.EditTextPreference
?是edittext的狀態(tài),
?
<EditTextPreferenceapp:key="edit"app:summary="summary"app:title="EditTextPreference"/>如果未指定key,將會(huì)報(bào)錯(cuò)
點(diǎn)擊edittextPreference,將會(huì)彈窗一個(gè)輸入框,dialog的彈窗就是我們的edittext內(nèi)容。
6.MultiSelectListPreference
?多選。用法和list以及DropDownPreference一樣。
需要配置數(shù)據(jù)來源
<MultiSelectListPreferenceapp:key="multiselect"app:title="MultiSelectListPreference"app:summary="summary"android:entries="@array/arry_entries"android:entryValues="@array/arry_values"/>7.PreferenceCategory
分類。目前和Preference用法差不多。也是不可用。
@Override public boolean isEnabled() {return false; }8.PreferenceScreen
是一個(gè)根節(jié)點(diǎn)。
?9.SeekBarPreference
seekbar是原來Android的滑動(dòng)控件。Preference拼接以后,變成一個(gè)可以存儲(chǔ)的。
<SeekBarPreferenceapp:key="seek"app:summary="SeekBarPreference"app:title="SeekBarPreference"android:max="100"/>為什么會(huì)存在SharePreference?為什么這些控件都是已Preference結(jié)尾?現(xiàn)在大家應(yīng)該明白了吧。
同理,如果緩存被清了,這些狀態(tài)也會(huì)被清掉。
二.引用
1.繼承:PreferenceFragmentCompat
public class MySettingsFragment extends PreferenceFragmentCompat我們需要繼承PreferenceFragmentCompat模塊,重寫
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) 的方法。加載xml文件:
setPreferencesFromResource(R.xml.preferences, rootKey);獲取節(jié)點(diǎn)信息:
getPreferenceManager():獲取到一個(gè)Manager對(duì)象,或者直接獲取getPreferenceScreen().如果想獲取SharedPreferences信息,可以通過PreferenceManager;
getPreferenceManager().getSharedPreferences(); getPreferenceManager().getSharedPreferencesName(); getPreferenceManager().getSharedPreferencesMode() PreferenceScreen:獲取childCount=getPreferenceCount()
獲取指定preference= getPreferenceScreen().getPreference(int position);
然后可以對(duì)Preference進(jìn)行二次編輯
?
總結(jié)
以上是生活随笔為你收集整理的Android PreferenceScreen的使用和详解(设置页面)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx源码下载、编译和安装
- 下一篇: [Swift]SwiftyJSON的使用