正文  数据库 > Preferences >

android中SharedPreferences用法详

在android应用开发中,作为配置环境的preferences,用到的地方颇多,下面我带大家来详细讲解下android中SharedPreferences的用法。先上图看下配置画...

 

在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