android_PreferenceActivity_PreferenceFragment

Preferences类

    Preferences类作为所有Setting的抽象父类。其每个子类都包括一组属性允许你指定其title(标题)、默认值等。每个子类还提供了其自己的特定的属性和用户界面。一些常用的Preference有:

CheckboxPreference,ListPreference,EditTextPreference

PreferenceActivity
Setting

    PreferenceActivity,它并不像普通的Activity那样用layout来做自己的界面,它是用专属的xml/preference.xml来构建自己的界面,然后在类中加入此xml。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version= "1.0"  encoding= "utf-8" ?>
<PreferenceScreen xmlns:android= "http://schemas.android.com/apk/res/android"  >
     <PreferenceCategory android:title= "First Category" >
         <ListPreference
             android:key= "list_key"
             android:defaultValue= "list key default value"
             android:title= "list title"
             android:summary= "list_summary"
             android:entries= "@array/list_preference"
             android:entryValues= "@array/list_preference"
             android:dialogTitle= "list_dialog_title"  />     
     </PreferenceCategory>
     <PreferenceCategory android:title= "Second Category" >
         <EditTextPreference
             android:key= "edittext_key"
             android:defaultValue= "edit default value"
             android:summary= "edit summary"
             android:title= "edit title"  />
         <CheckBoxPreference
             android:key= "checkbox_key"
             android:defaultValue= "checkbox default value"
             android:summary= "checkbox summary"
             android:title= "checkbox title"
             />              
         <EditTextPreference
             android:key= "num_key"
             android:defaultValue= "0"
             android:summary= "edit summary"
             android:numeric= "integer"
             android:title= "input number"  />
  </PreferenceCategory></PreferenceScreen>

三项preference分成两组(PreferenceCategory),First Category和Second Category.

每一个Preference中的都会包含一个key(android:key),它的功能相当于普通layout中的id。
title:这一项的标题,字体比较大。

summary:摘要,标题下面的文字,字体较小。
defaultValue:为设置summary之前的默认值。

其中数组list_preference在array.xml中定义:

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string-array name="list_preference">

        <item>Red</item>

        <item>Blue</item>

        <item>Green</item>  

    </string-array>

</resources>

Setting中加入UI信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public  class  Setting  extends  PreferenceActivity  implements  OnSharedPreferenceChangeListener {
     
     private  EditTextPreference mEtPreference;
     private  ListPreference mListPreference;
     private  CheckBoxPreference mCheckPreference;
     
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
 
         addPreferencesFromResource(R.xml.preferences);
         initPreferences();
     }
     
     private  void  initPreferences() {
         mEtPreference = (EditTextPreference)findPreference(Consts.EDIT_KEY);
         mListPreference = (ListPreference)findPreference(Consts.LIST_KEY);
         mCheckPreference = (CheckBoxPreference)findPreference(Consts.CHECKOUT_KEY);
     }

用sharedPreference来获得这些值。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
     @Override
     protected  void  onResume() {
         super .onResume();
 
         // Setup the initial values
         SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
         mListPreference.setSummary(sharedPreferences.getString(Consts.LIST_KEY,  "" ));
         mEtPreference.setSummary(sharedPreferences.getString(Consts.EDIT_KEY,  "linc" ));
         
         // Set up a listener whenever a key changes
         sharedPreferences.registerOnSharedPreferenceChangeListener( this );
     }
 
     @Override
     protected  void  onPause() {
         super .onPause();
         // Unregister the listener whenever a key changes
         getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener( this );
     }    
     
     @Override
     public  void  onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
         if  (key.equals(Consts.EDIT_KEY)) {
             mEtPreference.setSummary(
                     sharedPreferences.getString(key,  "20" ));
         else  if (key.equals(Consts.LIST_KEY)) {
             mListPreference.setSummary(sharedPreferences.getString(key,  "" ));
         }
     }
}

其他场景获取存储内容

private void showSettingInfo() {  

        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  

        tvCheckout.setText(settings.getBoolean(Consts.CHECKOUT_KEY, false)+"");  

        tvEditText.setText(settings.getString(Consts.EDIT_KEY, ""));  

        tvList.setText(settings.getString(Consts.LIST_KEY, "linc"));  

 } 

Preference Fragments

public static class SettingsFragment extends PreferenceFragment {

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        // Load the preferences from an XML resource

        addPreferencesFromResource(R.xml.preferences);

    }

    ...

设置默认值

首先在XML中设置android:defaultValue属性。然后在应用程序启动的第一个Activity中的onCreate()方法中调用:

PreferenceManager.setDefaultValues(this,R.xml.advanced_preferences,false);

Header File

<?xml version="1.0" encoding="utf-8"?>

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">

    <header 

        android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne"

        android:title="@string/prefs_category_one"

        android:summary="@string/prefs_summ_category_one" />

    <header 

        android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo"

        android:title="@string/prefs_category_two"

        android:summary="@string/prefs_summ_category_two" >

        <!-- key/value pairs can be included as arguments for the fragment. -->

        <extra android:name="someKey" android:value="someHeaderValue" />

    </header>

</preference-headers>

<extra>元素允许你传递键值对Bundle给Fragment,通过getArguments()获得。使用这个Bundle的主要作用是重用相同的PreferenceFragment子类,根据不同的键值对,显示不同的XML文件。

public class SettingsActivity extends PreferenceActivity {

    @Override

    public void onBuildHeaders(List<Header> target) {

        loadHeadersFromResource(R.xml.preference_headers, target);

    }

}

当使用Preference Headers时,不需要实现onCreate()方法,因为其唯一的任务只是加载Headers

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {

    public static final String KEY_PREF_SYNC_CONN = "pref_syncConnectionType";

    ...


    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

        if (key.equals(KEY_PREF_SYNC_CONN)) {

            Preference connectionPref = findPreference(key);

            // Set summary to be the user-description for the selected value

            connectionPref.setSummary(sharedPreferences.getString(key, ""));

        }

    }

}


推荐在onResume时注册,在onPause()时取消注册。

@Override

protected void onResume() {

    super.onResume();

    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

}


@Override

protected void onPause() {

    super.onPause();

    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值