在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