最近在学习Android上的开发,打算做一个app。在做之前感觉很简单的功能,自己也有几年的C++经验,应该学起来很容易。但是事实告诉我,要注意的细节还是很多的。
大部分的app都会有设置页面, 用来配置一些使用上的特性,android提供了一个perferenceActivity的activity来支持与设置相关的开发工作,具体的内容可以参看sdk。这里主要说明一下如何使用MultiSelectListPreference。MultiSelectListPreference 提供了一个多选的列表供用户选择,然后会自动的持久化到SharedPreference中去,一个比较简单的xml配置节如下:
<MultiSelectListPreference android:key="abc" android:entries="@array/days" android:entryValues="@array/day_value" android:title="重复" android:summary="无" />
其中的android:entries 是弹出列表的文本数组,而android:entryValues对应相映的值数组,一一对应。android:title控制perference的文本,summary是描述性的文本。 上面代码中的 android:entries 和android:entryValues在values中进行制定,举例如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="days"> <item>周一</item> <item>周二</item> <item>周三</item> <item>周四</item> <item>周五</item> <item>周六</item> <item>周日</item> </string-array> <string-array name="day_value"> <item>1</item> <item>2</item> <item>4</item> <item>8</item> <item>16</item> <item>32</item> <item>64</item> </string-array> </resources>
这样就实现了一个很简单的设置项,如果没有更进一步的要求就可以完成了。但是我们制定的这个preference在activity上的显示还比较单调,无法根据用户选中的项来更新preference的文本显示。为了达到这个目的,我们需要监听这个preference对应的onPreferenceChange事件来进行处理。具体的代码如下:
Preference pref = findPreference("abc"); pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){ @Override public boolean onPreferenceChange(Preference pref, Object arg1) { pref.setSummary(arg1.toString()); return true; } });
这样就可以动态的按照用户的选择来显示不同的 Title和Summary.