Android学习之Shared Preference

  在之前遇到有个需求是要改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 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3     <string-array name="update_freq_options">
 4         <item>Every Minute</item>
 5         <item>5 minutes</item>
 6         <item>10 minutes</item>
 7         <item>15 minutes</item>
 8         <item>Every Hour</item>
 9     </string-array>
10     <string-array name="magnitude">
11         <item>1</item>
12         <item>3</item>
13         <item>5</item>
14         <item>6</item>
15         <item>7</item>
16         <item>8</item>
17     </string-array>    
18     <string-array name="magnitude_options">
19         <item>1</item>
20         <item>3</item>
21         <item>5</item>
22         <item>6</item>
23         <item>7</item>
24         <item>8</item>
25     </string-array>  
26     <string-array name="update_freq_values">
27         <item>1</item>
28         <item>5</item>
29         <item>10</item>
30         <item>15</item>
31         <item>60</item>
32     </string-array>        
33 
34 </resources>

然后在res/xml下创建userpreferences.xml,用于定义PreferenceScreen

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <PreferenceScreen
 3     xmlns:android="http://schemas.android.com/apk/res/android">
 4     <CheckBoxPreference 
 5         android:key="PREF_ANTUO_UPDATE"
 6         android:title="Auto refresh"
 7         android:summary="Select to turn on automatic updating"
 8         android:defaultValue="true"/>
 9     <ListPreference 
10         android:key="PREF_UPDATE_FREQ"
11         android:title="Prefresh frequency"
12         android:summary="Frequency at which to refresh earthquake list"
13         android:entries="@array/update_freq_options"
14         android:entryValues="@array/update_freq_values"
15         android:dialogTitle="Prefresh frequency"
16         android:defaultValue="60"/>
17     <ListPreference 
18         android:key="PREF_MIN_MAG"
19         android:title="Minmum magnitude"
20         android:summary="Select the minimum magnitude earthquake to report"
21         android:entries="@array/magnitude_options"
22         android:entryValues="@array/magnitude"
23         android:dialogTitle="Magnitude"
24         android:defaultValue="3"/>
25 </PreferenceScreen>

最后在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 <?xml version="1.0" encoding="utf-8"?>
2 <preference-headers
3     xmlns:android="http://schemas.android.com/apk/res/android">
4        <header android:fragment="com.sharedpreferencetest.UserPreferenceFragment"
5            android:title="Settings"
6            android:summary="Earthquake Refresh Settings" />
7 </preference-headers>

 最后在MainActivity中重写onBuildHeaders方法

1 public class MainActivity extends PreferenceActivity
2 {    
3     @Override
4     public void onBuildHeaders(List<Header> target)
5     {
6         // TODO Auto-generated method stub
7         loadHeadersFromResource(R.xml.preference_headers, target);
8     }
9 }

 搞定,效果如图:                然后点击Settings就会进入下个界面

                                                                        

posted @ 2013-09-27 14:10  pp_dark  阅读(1136)  评论(0编辑  收藏  举报