在android应用开发中,作为配置环境的preferences,用到的地方颇多,下面我带大家来详细讲解下android中SharedPreferences的用法。先上图看下配置画面的效果吧。 上图是preferences页面的效果图。 点击设置IP地址后跳出设置对话框:
android 为了方便管理SharedPreferences,为我们提供了简单快捷的PreferenceActivity类,通过继承该类,可以实现各种漂亮的preferences UI设置界面。下面贴出preferences页面的java代码,类名是MyPreferenceActivity.java
view plain package org.tayue; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceActivity; /** * Preference用法举例 * @author xionglei * */ public class MyPreferenceActivity extends PreferenceActivity implements OnPreferenceChangeListener{
private EditTextPreference address; private EditTextPreference port; private EditTextPreference group; private ListPreference type; private CheckBoxPreference keepAlive; private CheckBoxPreference ack;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //加入preferences的布局文件,这里和普通的布局文件加入方式不一样,注意区别 addPreferencesFromResource(R.layout.preference); //获得一个共享的preferences,通过该变量来读取配置文件中的各参数值 SharedPreferences sp = getPreferenceManager().getSharedPreferences();
address = (EditTextPreference) findPreference("prefer_address"); address.setOnPreferenceChangeListener(this); port = (EditTextPreference) findPreference("prefer_port"); port.setOnPreferenceChangeListener(this); group = (EditTextPreference) findPreference("prefer_ht_group"); group.setOnPreferenceChangeListener(this); ack = (CheckBoxPreference) findPreference("prefer_sendACK"); ack.setOnPreferenceChangeListener(this); type = (ListPreference) findPreference("prefer_request_type"); type.setOnPreferenceChangeListener(this); keepAlive = (CheckBoxPreference) findPreference("prefer_keepAlive"); keepAlive.setOnPreferenceChangeListener(this);
//sp的getString方法有两个参数,该方法是获取配置参数的方法,参数一是首选参数,一般在生成都配置文件中,参数二是默认参数,在无法读取参数一的情况下就用参数二 String typeStr = sp.getString("prefer_request_type", getResources().getString(R.string.type)); type.setSummary(typeStr); type.setValue(typeStr);
String addressStr = sp.getString("prefer_address", getResources().getString(R.string.ip)); address.setSummary(addressStr); address.setText(addressStr);
String portStr = sp.getString("prefer_port", getResources().getString(R.string.p)); port.setSummary(portStr); port.setText(portStr);
String groupStr = sp.getString("prefer_ht_group", getResources().getString(R.string.group)); group.setSummary(groupStr); group.setText(groupStr);
ack.setChecked(sp.getBoolean("prefer_sendACK", Boolean.getBoolean(getResources().getString(R.string.alive))));
keepAlive.setChecked(sp.getBoolean("prefer_keepAlive", Boolean.getBoolean(getResources().getString(R.string.alive))));
}
@Override public boolean onPreferenceChange(Preference preference, Object newValue) { if(preference == address){ preference.setSummary(newValue.toString()); } if(preference == port){ preference.setSummary(newValue.toString()); } if(preference == group){ preference.setSummary(newValue.toString()); } if(preference == type){ type.setSummary(newValue.toString()); } if(preference == ack){ preference.setSummary(newValue.toString()); } if(preference == keepAlive){ preference.setSummary(newValue.toString()); } return true; } }
preferences的布局文件如下
view plain <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="Settings"> <PreferenceCategory android:title="设置"> <EditTextPreference android:key="prefer_address" android:title="@string/setAddress"/> <EditTextPreference android:key="prefer_port" android:numeric="integer" android:title="@string/port" /> <ListPreference android:key="prefer_request_type" android:title="@string/requsttype" android:dialogTitle="@string/requsttype" /> <CheckBoxPreference android:key="prefer_keepAlive" android:title="@string/keep_alive" android:summary="false" /> <CheckBoxPreference android:key="prefer_sendACK" android:title="@string/send_ack" android:summary="false" /> <EditTextPreference android:key="prefer_ht_group" android:title="@string/ht_group" android:dialogTitle="@string/ht_group"/> </PreferenceCategory>
</PreferenceScreen>
该布局文件的格式是android的规范。 通过MyPreferenceActivity类的设置后就要可以在其他activity页面通过sharedPreference 来获取系统的参数。中途生成的xml配置文件位于data/data/org/tayue/shared_prefs目录下。可以pull出去查看。
好了,今天就讲解到这里,如果大家还有些地方不明白可以下载源代码来仔细研究下, 源代码地址是:http://download.csdn.net/detail/bearray123/3722067 转载请注明出处http://blog.csdn.net/bearray123
|