心里一直想着要写些什么东西,技术也好,心情也罢。总之要记录自己的生活,可是偏偏爱拖延。假期的小聚让我看到了更多别人的故事,发现每个人都有自己苦恼的事情,尽管他平时看上去十分快乐。生活不会完美,要学会欣赏其中的景色;自己不会完美,要学会接纳自己的平凡。还是记录下关于技术的吧
preference,google写好的关于存储“设置类”信息的方便类。可以将用户的习惯设置保存到SharedPreference文件夹下。先看一个简单的例子
1 xml布局,此处需要在res下建个xml文件夹
2 activity/fragment extents PreferenceActivity/PreferenceFragment
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.activity_main);
}
到此,你的页面中已经显示了一个名字的设置项,此时会发现,我去输入名字,页面并没有显示,如果你的手机root了,可以发现xml中保存了信息,这是为什么呢?原因有两点:
1xml中信息以key-value形式保存,value用summary来显示,我们可以在onCreate或者onResume中去加载。
sp = getPreferenceManager().getDefaultSharedPreferences(getApplicationContext());
String name = sp.getString("name", "");
findPreference("name").setSummary(name);
这样的话内容就可以显示了。此时问题又来了,我再去修改值,并没有生效。
2 即页面的实时刷新问题,google也帮我们做好了,这里提供一种方式,activity/fragment实现OnSharedPreferenceChangeListener
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
update();
}
private void update() {
sp = getPreferenceManager().getDefaultSharedPreferences(getApplicationContext());
String name = sp.getString("name", "");
findPreference("name").setSummary(name);
}
此时你的设置项就可以用了。刚才的例子非常的简单,接下来对整体的知识做一个梳理
1xml
1.1根节点PreferenceScreen会占整个屏幕,如果你的某个设置项需要整个屏幕显示,可以嵌套PreferenceScreen
1.2PreferenceCategory,我的例子中并没有说明,但是顾名思义,就是分类的意思,强迫症患者的福音。比如说,某个Category下的xxxPreference没有设置内容,就让该Category隐藏,也是本人工作中遇到过的需求。这里提供思路:加载xxxPreference的value,如果所有value都是默认值,此时getPreferenceScreen().removePreference(preference);
1.3xxxPreference
1.3.1EditTextPreference,类似EditText,可以保存文字类的信息
1.3.2CheckBoxPreference,类似CheckBox,选择
1.3.3ListPreference,单选
1.3.4MultiSelectListPreference,多选
1.3.5RingtonePreference,铃声
1.3.6SwitchPreference,滑块开关,(个人觉得UI挺简洁美观)
详细介绍来了。这些preferfence都有些共同的属性,这里一块说明
key preference的“身份证”
value key-value,不解释
title 标题
summary 小标题(例子中用来显示用户输入的名字)
entries 单选/多选,显示的选择项
entryValues 对应entries的key-valued形式
2点击事件
onPreferenceChange,点击对话框的“确定”时触发,需要手动保存
onPreferenceClick,点击xxxPreference时触发,返回false时会继续调用onPreferenceTreeClick
第一次写东西,内容比较简单,都是自己的体会,格式上可能还有些问题 。