在之前遇到有个需求是要改settings里面自动转屏的首选项,于是就学习了下Shared Preference。Shared Preference是一种简单的、轻量级的键/值对机制,用于保存原始应用程序数据,最常见的就是首选项。
如果没有特殊要求,我们可以使用Android提供的框架来创建系统样式的Preference Screen,在其内部可以包含PreferenceCategory和Preference<control>元素的任意组合。建立Preference Screen,需要向里面添加首选项控件,原生的这些控件有:CheckBoxPreference、EditTextPreference、ListPreference、MultiSelectListPreference和RingtonePreference,每种控件至少包含4种属性:android:key,android:title,android:summary,android:defaultValue,用一种图来对其进行说明:
创建Preference有两种方法,第一种是使用PreferencesActivity。首先在res/values下创建一个arrays.xml用于存放ListPreference的数据
1 23 4 10- Every Minute
5- 5 minutes
6- 10 minutes
7- 15 minutes
8- Every Hour
911 18- 1
12- 3
13- 5
14- 6
15- 7
16- 8
1719 26- 1
20- 3
21- 5
22- 6
23- 7
24- 8
2527 33 34- 1
28- 5
29- 10
30- 15
31- 60
32
然后在res/xml下创建userpreferences.xml,用于定义PreferenceScreen
1 24 9 17 25
最后在MainActivity中重写onCreate方法,这个MainActivity要继承PreferenceActivity,使用addPreferencesFromResource添加PreferenceScreen
1 public class MainActivity extends PreferenceActivity 2 { 3 @Override 4 protected void onCreate(Bundle savedInstanceState) 5 { 6 // TODO Auto-generated method stub 7 super.onCreate(savedInstanceState); 8 addPreferencesFromResource(R.xml.userpreferences); 9 }10 }
OK,搞定,效果如图
第二种方法是使用PreferenceFragment,首先创建UsePreferenceFragment类继承PreferenceFragment类,重写onCreate方法,使用addPreferencesFromResource来加载userpreferences.xml
1 public class UserPreferenceFragment extends PreferenceFragment 2 { 3 @Override 4 public void onCreate(Bundle savedInstanceState) 5 { 6 // TODO Auto-generated method stub 7 super.onCreate(savedInstanceState); 8 addPreferencesFromResource(R.xml.userpreferences); 9 }10 }
然后在res/xml下创建preference_headers.xml,来关联UsePreferenceFragment
1 24 7
最后在MainActivity中重写onBuildHeaders方法
1 public class MainActivity extends PreferenceActivity2 { 3 @Override4 public void onBuildHeaders(Listtarget)5 {6 // TODO Auto-generated method stub7 loadHeadersFromResource(R.xml.preference_headers, target);8 }9 }
搞定,效果如图: 然后点击Settings就会进入下个界面