PreferenceFragment 和 PreferenceActivity讲解

来源:互联网 发布:内存兼容性测试软件 编辑:程序博客网 时间:2024/05/16 02:38

很明显PreferenceFragment Fregment PreferenceActivityActivity

当你的应用针对的系统在3.0以上的时候,你就应该用PreferenceFragment,现在主流系统4.0的情况下,当然选择使用PreferenceFragment。原因是PreferenceFragment是一个更加平滑的结构,你可以将它依附在任何的activity上面,谷歌强力推荐使用PreferenceFragment

常用Preference

CheckPreference —— CheckBox 单选框

EditTextPreference —— EditText 输入文本框

ListPreference —— ListView 列表框

RingtonePreference —— 选择铃声

XML定义常用的属性有:

android:key 每个Preference控件独一无二的”ID”,唯一表示此Preference

android:defaultValue 默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态;

EditTextPreference的默认值可为”110”

android:enabled 表示该Preference是否可用状态。

android:title 每个PreferencePreferenceScreen布局上显示的标题——大标题

android:summary 每个PreferencePreferenceScreen布局上显示的标题——小标题(可以没有)

ListPreference中:

android:entries:类型为array,控件欲显示的文本

android:entryValues:类型为array,与文本相对应的key-value键值对,value保存至sharedPreference文件

PreferenceFragment 使用步骤

1.定义preference

在项目的res/xml中新建一个preferences.xml.用于定义菜单界面的设置选项:

<PreferenceScreen        xmlns:android="http://schemas.android.com/apk/res/android">    <PreferenceCategory            android:title="PreferenceCategory A">        <CheckBoxPreference                android:key="checkbox_preference"                android:title="title_checkbox_preference"                android:summary="summary_checkbox_preference" />    </PreferenceCategory>    <PreferenceCategory            android:title="PreferenceCategory B">        <EditTextPreference                android:key="edittext_preference"                android:title="title_edittext_preference"                android:summary="null"                  android:dialogTitle="dialog_title_edittext_preference"                android:defaultValue="null" />        <ListPreference              android:dialogTitle="Choose font"              android:entries="@array/pref_font_types"              android:entryValues="@array/pref_font_types_values"              android:key="list_preferenc"              android:summary="sans"              android:title="Font"             android:defaultValue="sans"/>     </PreferenceCategory></PreferenceScreen>

android:entries android:entryValues定义在res/values/strings.xml

<string name="app_name">AndroidPreferenceFragment</string>    <string name="hello_world">Hello world!</string>    <string name="menu_settings">Settings</string>    <string name="title_activity_main">MainActivity</string>        <string-array name="pref_font_types">        <item>sans</item>        <item>serif</item>        <item>monospace</item>        <item>Yahei</item>    </string-array>    <string-array name="pref_font_types_values">        <item>sans</item>        <item>serif</item>        <item>monospace</item>        <item>Yahei</item>    </string-array>

2.创建一个activity用于给PreferenceFragment依附

package com.example.Androidpreferencefragment;import android.app.Activity;import android.os.Bundle;public class SetPreferenceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {  // TODO Auto-generated method stub  super.onCreate(savedInstanceState);    getFragmentManager().beginTransaction().replace(android.R.id.content,                new PrefsFragment()).commit(); }}

3.创建PreferenceFragment

package com.example.androidpreferencefragment;import android.annotation.SuppressLint;import android.content.SharedPreferences;import android.content.SharedPreferences.OnSharedPreferenceChangeListener;import android.os.Bundle;import android.preference.Preference;import android.preference.PreferenceFragment;import android.preference.Preference.OnPreferenceChangeListener;@SuppressLint("NewApi")public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener{ @Override public void onCreate(Bundle savedInstanceState) {  // TODO Auto-generated method stub  super.onCreate(savedInstanceState);  // Load the preferences from an XML resource  addPreferencesFromResource(R.xml.preferences); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {  // TODO Auto-generated method stub  // Set summary to be the user-description for the selected value  if(!key.equals(MainActivity.PRF_CHECK))  {   Preference connectionPref = findPreference(key);   connectionPref.setSummary(sharedPreferences.getString(key, ""));  } } @Override public void onResume() {  super.onResume();  getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() {  getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);  super.onPause(); }}

implements OnSharedPreferenceChangeListener 是用于监听SharedPreference是否改变的。这里主要的作用是当SharedPreference改变的时候及时更新界面中preferencesummary,提供一个更好的交互。注意在OnResumeOnPause中要注册和卸载监听器,维护activity中的生命周期。

注:不能给每个preference设置OnChangeListener来更新界面中preferencesummary,这样会阻止系统存储preference.xml.


4.设置默认

当用户第一次运行应用的时候,用户还没有设置自己preference,这时候就要指定默认的prefernnce了。

首先在xml定义好Android:defaultValue项。然后在主Activity(也可以是其他activity,但在第一次运行的时候一定会进去,比如闪屏Activity)的onCreate方法中调用setDefaultValues方法。

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);这个函数有三个参数:

第一个为应用上下文,第二个是preferenceid,第三个为false指只在第一次运行的时候加载默认值。


5.取出preference

SharedPreferences mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

然后通过get方法和key值就可以取出对应的值了,比如:

mySharedPreferences.getBoolean("checkbox_preference", false);String my_edittext_preference = mySharedPreferences.getString("edittext_preference", "");



0 0
原创粉丝点击