Preference的使用

android

2013-10-25 12:07

步骤1:编写preference XML,在res/xml/下加入我们的preference XML文件,例如名字叫set.xml


步骤2:set.xml写入

<?xml version="1.0" encoding="utf-8"?>
<!-- preference的组织方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是带 层次组织关系,在后面的例子体验,而PreferenceScreen就是最平白和基础的方式 -->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
   
<!-- 有四个基本组建,这个例子学习两个。里面的内容对照图,很容易理解,RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 -->
    <CheckBoxPreference android:key="
checkbox"
        android:title="
CheckBox Preference"
        android:summary="
Check it on , check it off"/>
    <RingtonePreference android:key="
ringtone"
        android:title="
Ringtone Preference"
        android:showDefault="
true"
        android:showSilent="
true"
        android:summary="
Pick a tone, any tone"/>
</PreferenceScreen>

步骤3:

public class Chapter21Test1 extends PreferenceActivity{
  
 @Override
    protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.c21preference);
    }
}



获取preferences可以通过三种方式:
一、getPreferences():可以获取同一activity中的preference;
二、getSharedPreferences():可以获取映用级别的preferences(),在这个例子中由于我们封装在同一app中,也可以使 用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);其中第一个参数name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():就是我们例子的方式,通过Android的偏好管理器来获取其所管理的preferences。

       SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
        System.out.println(new Boolean(prefs.getBoolean("
checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
        System.out.println(prefs.getString("
ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值



Preferenece数据的操作


在上面的例子中,preference的数值会被保留,而且可以 在其他的activity中读取。如果需要清除数据,可以通过remove()清除某个名字的prefernece,clear()清除所有的 preferences。我们可以通过edit()获取preferences的editor,进而进行编辑,修改后,通过commit()将修改值保 存。


  <PreferenceCategory android:title="Other Preferences">           //分组
          <EditTextPreference android:key="text"                   //变量名称
               android:title="Text Entry Dialog"                   //弹出框提示
               android:summary="Click to pop up a field for entry" //简介
               android:dialogTitle="Enter something useful"/>     // 弹出框标题
           <ListPreference android:key="list"                           
               android:title="Selection Dialog"
               android:summary="Click to pop yo a list for select"
               android:entries="@array/cities"                    //显示列表
               android:entryValues="@array/airport_codes"         //对应的值
               android:dialogTitle="Choose a City"/>         
     </PreferenceCategory>


值改变事件

     public class set extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.set);
        
        
         PreferenceScreen prefSet = getPreferenceScreen();
         ListPreference syncIntervalList = (ListPreference) prefSet.findPreference("list");
         CheckBoxPreference CheckBoxPreference = (CheckBoxPreference) prefSet.findPreference("checkbox");
         final PreferenceCategory PreferenceCategory = (PreferenceCategory) prefSet.findPreference("zz");
        
        
         CheckBoxPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
            
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                
                if (newValue.equals(false)){
                    
                    PreferenceCategory.setEnabled(false);
                }else
                {
                    PreferenceCategory.setEnabled(true);
                    
                }
                
                return true;
            }
        });
        
        
        
         syncIntervalList.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
            
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                String s=newValue.toString();
                Toast.makeText(getBaseContext(), s, 3).show();
                return true;
            }
        });
    }
}




<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
      <CheckBoxPreference android:key="checkbox"
        android:title="是否同步"
        android:summary="Check it on , check it off"/>
    
    <PreferenceCategory
        android:key="zz"
         android:title="Other Preferences"
    android:enabled="false"
        >
          <EditTextPreference android:key="text"
               android:title="Text Entry Dialog"
              
               android:summary="Click to pop up a field for entry"
               android:dialogTitle="Enter something useful"/>
           <ListPreference android:key="list"
               android:title="Selection Dialog"
               android:summary="Click to pop yo a list for select"
               android:entries="@array/cities"
               android:entryValues="@array/airport_codes"
               android:dialogTitle="Choose a City"/>
     </PreferenceCategory>
</PreferenceScreen>