在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