java代码:
public class Main3Activity extends PreferenceActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main3);
//加载布局文件,相当于setContentView();addPreferencesFromResource(R.xml.dashboard_categories);}
}
xml 布局文件,CheckBoxPreference 就相当于CheckBox 加 SharedPreference 的封装,只要选中之后,就会在shared_prefs文件加下生成对应的xml 文件,key就是xml文件中定义的key:android:key=“checkbox”,如果里面再套一个PreferenceScreen节点,点击进去就进入PreferenceScreen 这个节点所包含的xml文件。
key 是生成xml,文件所对应的key
title是对应的标题
summary是对应的小标题
icon 是对应的图标
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" ><CheckBoxPreferenceandroid:key="checkbox"android:title="CheckBoxPreference"android:summary="check it box"/><RingtonePreferenceandroid:key="ring"android:title="ringtone"android:summary="check a ringtone"/><PreferenceScreenandroid:key="screen"android:title="PreferenceScreen"android:summary="screen it"><SwitchPreferenceandroid:key="switch"android:title="switchPreference"android:summary="switch it"/><EditTextPreferenceandroid:key="edit"android:title="editPreference"android:summary="OK"/></PreferenceScreen>
</PreferenceScreen>
ListPreference 的用法,如下图所示,点击Options 弹出对话框,total 是名称,当选择check时,此时在xml文件中保存的值是
1,所以entries 属性,所对应的是单选框的标题,entryValues属性,所对应的是在xml文件中保存的值
<ListPreferenceandroid:key="list"android:title="Options"android:entries="@array/entry_list"android:entryValues="@array/values_list"android:dialogTitle="list dialogtitle"android:defaultValue="1"/>// value 下的string.xml
<resources><string name="app_name">My Application</string><string-array name="entry_list"><item>total</item><item>check</item><item>airplace</item></string-array><string-array name="values_list"><item>0</item><item>1</item><item>2</item></string-array>
</resources>
MultiSelectListPreference
它的实现和ListPreference相似,不同的是还可以不选择或者多个选择,代码是和ListPreference一样的,在xml 保存的数据是set集合:
16
2
运行效果如下图:
onPreferenceTreeClick,这个方法是点击时候的回调,然后根据不同的key,进行区分,然后处理事件
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main3);addPreferencesFromResource(R.xml.dashboard_categories);checkbox = (CheckBoxPreference)findPreference("checkbox");hahah = findPreference("ltt");}@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {if(preference.getKey().equals("checkbox")){Log.i("lgj", "checkbox");}if(preference.getKey().equals("ltt")){Log.i("lgj", "ltt");}return true;}
除了上面这个监听的方法之外,还有两个重要的接口:
OnPreferenceChangeListener
当Preference的元素值发送改变时,触发该事件,记住只有元素值改变才会触发这个值,返回值为true 表示将新值写入sharedPreference文件中
false 则不将新值写入sharedPreference文件
那么这三个点击事件在一起是什么用的呢?它的规则如下:
点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值(这个下面会讲解这个值是如何保存的),然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我们得到的控件值就是最新的Preference控件值。然后onPreferenceClick会比onPreferenceTreeClick()方法先调用,如果onPreferenceClick方法返回true,那就不会再调用onPreferenceTreeClick()方法,如果onPreferenceClick()返回false就会继续调用onPreferenceTreeClick()方法
















