Android PreferenceScreen的使用和详解(设置页面)
PreferenceScreen是設置選項的配置文件,一般用在設置頁面,用來當前的狀態是保存在。該狀態無須用戶處理,存在SharedPreferences中。
1.如何使用
1.1布局文件的創建
PreferenceScreen的用法和layout的類似,都是通過xml文件來管理的,但是PreferenceScreen的布局需要自己去創建
在/main/res/xml夾下新建preferences.xml文件,文件的根布局PreferenceScreen節點。
配置如下
<?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>布局的預覽
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狀態存儲在SharedPreferences中,所以,每個Preference都必須有一個key,這樣方便狀態存儲,如果當前key沒有設置,在后期的熟悉操作,可能會存在報錯,如果報錯key is null,設置一個key即可。
key:指定一個key
? ? java.lang.IllegalArgumentException: Key cannot be null
title:標題
summary:標題下方的內容
layout:可以嵌入一個layout,覆蓋當前view的信息,title或者其他都不會顯示,只顯示layout
icon:左側的圖標
2.ListPreference
<ListPreferenceandroid:entries="@array/arry_entries"android:entryValues="@array/arry_values"app:key="ListPreference"app:summary="summary"app:title="ListPreference" />entries:顯示的item
entryValues:內部值
這兩個是數組,核心是key和value對應關系,數據長度一致,否則會出問題
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這個preference強制轉化為listpreference類型ListPreference listpreference = (ListPreference) preference;//獲取listpreference中的實體內容CharSequence[] entries = listpreference.getEntries();CharSequence[] entVal = listpreference.getEntryValues();//獲取listpreference中的實體內容的下標值int index = listpreference.findIndexOfValue((String) newValue);//把listpreference中的摘要顯示為當前listpreference的實體內容中選擇的那個項目listpreference.setSummary(entries[index] + "=" + entVal[index]);}return true;}});點擊獲取對應的值
3.DropDownPreference:
下拉選擇,和list的相似,但是list是彈窗。下拉的話會比較丑
?DropDownPreference的配置和ListPreference一樣,只是,ListPreference是dialog的彈窗展示,DropDownPreference的是一個recycleview的adapter,都是繼承DialogPreference。
?這個顯示可以自己定義。
內部Adapter數據添加:
3.CheckBoxPreference
CheckBox是勾選,多了一個開和關的狀態
<CheckBoxPreferenceapp:key="CheckBoxPreference"app:title="CheckBoxPreference"app:summary="CheckBoxPreference"app:summaryOff="summaryOff"app:summaryOn="summaryOn"/>?app:summaryOn的優先級大于app:summary,如果設置了on和off的summary,原來的summary將被覆蓋了
4.SwitchPreference
開關,和原來Switch的控件一樣使用,
<SwitchPreferenceapp:title="SwitchPreference"app:summary="summary"app:summaryOff="summaryOff"app:summaryOn="summaryOn"/>用法和CheckBox一樣。
5.EditTextPreference
?是edittext的狀態,
?
<EditTextPreferenceapp:key="edit"app:summary="summary"app:title="EditTextPreference"/>如果未指定key,將會報錯
點擊edittextPreference,將會彈窗一個輸入框,dialog的彈窗就是我們的edittext內容。
6.MultiSelectListPreference
?多選。用法和list以及DropDownPreference一樣。
需要配置數據來源
<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
是一個根節點。
?9.SeekBarPreference
seekbar是原來Android的滑動控件。Preference拼接以后,變成一個可以存儲的。
<SeekBarPreferenceapp:key="seek"app:summary="SeekBarPreference"app:title="SeekBarPreference"android:max="100"/>為什么會存在SharePreference?為什么這些控件都是已Preference結尾?現在大家應該明白了吧。
同理,如果緩存被清了,這些狀態也會被清掉。
二.引用
1.繼承:PreferenceFragmentCompat
public class MySettingsFragment extends PreferenceFragmentCompat我們需要繼承PreferenceFragmentCompat模塊,重寫
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) 的方法。加載xml文件:
setPreferencesFromResource(R.xml.preferences, rootKey);獲取節點信息:
getPreferenceManager():獲取到一個Manager對象,或者直接獲取getPreferenceScreen().如果想獲取SharedPreferences信息,可以通過PreferenceManager;
getPreferenceManager().getSharedPreferences(); getPreferenceManager().getSharedPreferencesName(); getPreferenceManager().getSharedPreferencesMode() PreferenceScreen:獲取childCount=getPreferenceCount()
獲取指定preference= getPreferenceScreen().getPreference(int position);
然后可以對Preference進行二次編輯
?
總結
以上是生活随笔為你收集整理的Android PreferenceScreen的使用和详解(设置页面)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx源码下载、编译和安装
- 下一篇: Android PreferenceSc