android中SharedPreferences用法详解

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


上图是preferences页面的效果图。

点击设置IP地址后跳出设置对话框:




android 为了方便管理SharedPreferences,为我们提供了简单快捷的PreferenceActivity类,通过继承该类,可以实现各种漂亮的preferences UI设置界面。下面贴出preferences页面的java代码,类名是MyPreferenceActivity.java

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的布局文件如下

<?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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值