2019独角兽企业重金招聘Python工程师标准>>>

在android程序中,记录用户的偏好是个能极大提升用户体验的功能。Android里面的Preferences正式为此事而生。

Preferences可以用来记录简单的整数,布尔值,字符串等数据,且在各个Activity之间均能访问,主要用来实现程序的参数设置功能。最简单的用法是写两行代码自己创建,如下:

//从应用的任意处获得Preferences
SharedPreferences mPerferences = PreferenceManager  .getDefaultSharedPreferences(this);  //从Preferences中获得一个值,如果不存在则值为null
String loginName = mPerferences.getInt("name", null);  if(loginName == null){Log.v("Preferences", "User not login");
}//获得Editor编辑Preferences的值
SharedPreferences.Editor mEditor = mPerferences.edit();  mEditor.putInt("name", "admin");
//将更新后的值提交
mEditor.commit();

通过这种方式,应用会在自己的数据文件夹下新建一个名为shared_prefs的文件夹,并创建一个以应用包名为名称的xml文件存放Preferences的值。也就是这些preferences的值不只是跨activity的,更能在程序下次启动的时候获得。如果有特别的需求(比如记录多个用户的配置信息),还可以自定义存放Preferences值的文件的名字:

SharedPreferences mPerferences = PreferenceManager.getSharedPreferences("file-name", 0);

如果应用中设置信息不多,使用上面的方法完全没问题。Preferences还有更高级的用法--使用PreferenceActivity 。PreferenceActivity 是专门为程序的设置界面而设计的一个特殊的activity,配合这个activity的界面xml文件不是在res/layout下,而是res/xml/Preferences.xml。将你要设置的选项按照一定的格式写在res/xml/Preferences.xml中,并在继承了PreferenceActivity 的Activity的onCreate函数中加入代码:

addPreferencesFromResource(R.xml.preferences);

则程序就会自动生成一个android风格的设置界面。

关于Preferences.xml的格式,这里有一个复杂的文档供学习:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" ><PreferenceCategory android:title="@string/inline_preferences" ><CheckBoxPreferenceandroid:key="checkbox_preference"android:summary="@string/summary_toggle_preference"android:title="@string/title_toggle_preference" /></PreferenceCategory><PreferenceCategory android:title="@string/dialog_based_preferences" ><EditTextPreferenceandroid:dialogTitle="@string/dialog_title_edittext_preference"android:key="edittext_preference"android:summary="@string/summary_edittext_preference"android:title="@string/title_edittext_preference" /><ListPreferenceandroid:dialogTitle="@string/dialog_title_list_preference"android:entries="@array/entries_list_preference"android:entryValues="@array/entryvalues_list_preference"android:key="list_preference"android:summary="@string/summary_list_preference"android:title="@string/title_list_preference" /></PreferenceCategory><PreferenceCategory android:title="@string/launch_preferences" ><PreferenceScreenandroid:key="screen_preference"android:summary="@string/summary_screen_preference"android:title="@string/title_screen_preference" ><CheckBoxPreferenceandroid:key="next_screen_checkbox_preference"android:summary="@string/summary_next_screen_toggle_preference"android:title="@string/title_next_screen_toggle_preference" /></PreferenceScreen><PreferenceScreenandroid:summary="@string/summary_intent_preference"android:title="@string/title_intent_preference" ><intentandroid:action="android.intent.action.VIEW"android:data="http://www.baidu.com" /></PreferenceScreen></PreferenceCategory><PreferenceCategory android:title="@string/preference_attributes" ><CheckBoxPreferenceandroid:key="parent_checkbox_preference"android:summary="@string/summary_parent_preference"android:title="@string/title_parent_preference" /><CheckBoxPreferenceandroid:dependency="parent_checkbox_preference"android:key="child_checkbox_preference"android:layout="?android:attr/preferenceLayoutChild"android:summary="@string/summary_child_preference"android:title="@string/title_child_preference" /></PreferenceCategory></PreferenceScreen>

既然Preference可以用来保存app的配置信息,那么那些一改变设置就能立刻引发界面或程序改变的效果是怎么做的呢?答曰:onSharedPreferenceChangeListener。如下。注意,当使用SharedPreferences.Editor改变了一个值后切莫忘记调用commit函数,否则触发器就会一直触发。

public class xxxActivity extends Activity implements
OnSharedPreferenceChangeListener { //private SharedPreferences prefs;@Overridepublic void onCreate() { //super.onCreate();this.prefs = PreferenceManager.getDefaultSharedPreferences(this);this.prefs.registerOnSharedPreferenceChangeListener(this);Log.i(TAG, "onCreated");}public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { //if(key.equals("****")){//do someting}}
}

转载于:https://my.oschina.net/gesuper/blog/166978

Android开发之--Preferences的使用相关推荐

  1. eclipse+adt+android sdk,64位Ubuntu 11.10下Android开发环境的搭建(JDK+Eclipse+ADT+Android SDK详细)...

    Ubuntu 11.10 下 Android开发完全安装另一篇: 平台: 操作系统:ubuntu11.10 1.在ubuntu11.10下的ubuntu软件中心中有自带的eclipse,但是这里我们不 ...

  2. 在Windows环境下搭建Android开发环境

    标题:在Windows环境下搭建 Android 开发环境 作者:CrazyPebble 时间:2011年2月28日 声明:此文在参考其他网上资料以及笔者实践总结写下,一来自己可以做一些总结,二来给跟 ...

  3. 高级Android开发面试汇总

    高级 Android 开发面试题汇总 一. Android 基础 1. Service 的两种启动方式 简单的来说就是 直接启动 和 绑定启动 两种方式. // 直接启动 Context.startS ...

  4. 是否可以将Java 8用于Android开发?

    本文翻译自:Is it possible to use Java 8 for Android development? Searching the web, it is not clear if Ja ...

  5. 一个帖子学会Android开发四大组件

    注:本文来自"友盟杯",仅在此阅读,学习 这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解 二.Service详解 三.Broadcast Re ...

  6. Android开发技术周报 Issue#81

    教程 你需要知道的Android拍照适配方案 说起调用系统相机来拍照的功能,大家肯定不陌生,现在所有应用都具备这个功能.例如最基本的,用户拍照上传头像.Android开发的孩纸都知道,碎片化给拍照这个 ...

  7. 在一个空的Eclipse中安装Android开发的ADT和SDK

    在一个空的Eclipse中安装Android开发的ADT和SDK 一.eclipse中安装adt插件(http://jingyan.baidu.com/article/8cdccae99b564a31 ...

  8. Android开发环境简单配置

    为什么80%的码农都做不了架构师?>>>    ·         Android开发环境简单配置 写这个系列的原因也是因为自己对android比较感兴趣,而网上多数教程都是直接参照 ...

  9. android开发之-软件设置保存-快速学会使用SharedPreferences篇-实测

    我们在设计软件的时候,需要记录软件设置的基本信息,那么怎么来保存他们呢?我们可以使用SharedPreferences. SharedPreferences是一个xml文件,用来存储软件的常规设置.例 ...

最新文章

  1. poj 3378 Crazy Thairs
  2. ABAP内表(internal table)有关的系统变量
  3. Use function as controller
  4. Winform登录窗体登录仿asp.net验证成功后进入主界面
  5. linux vi刷新页面,vim的神级配置 - bubifengyun的个人页面 - OSCHINA - 中文开源技术交流社区...
  6. leetcode5:最长回文子串
  7. 月薪3000我不干!为什么学完Python后我失业了!
  8. 变量申明的提升,闭包,作用域,this,运算符优先级详细举例及讲解
  9. python3 tkinter教程
  10. 电脑知识:Win10系统优化的7个设置技巧
  11. excel单元格内容拆分_Excel | 单元格内容换行方法
  12. 帝国cms 自定义页面 php,帝国CMS增加自定义页面模板修改教程
  13. User requirement
  14. MySQL中联合索引问题,
  15. strchr()函数与strrchr()函数的实现
  16. 变态msn名字大集合(zt)
  17. unity List记录
  18. Educational Codeforces Round 105 (Rated for Div. 2) A-D题解
  19. 浅析用户角色与用户画像
  20. 计算机操作系统——什么是最早截止时间优先调度算法?什么是最低松弛度有限调度算法?举例说明之~

热门文章

  1. python异常处理_汇总三大python异常处理、自定义异常、断言原理与用法分析
  2. 多视图几何总结——单应矩阵和基础矩阵的兼容关系
  3. 全球及中国增强现实产业战略布局及运营前景决策分析报告2021-2027年
  4. 缅甸公民法(1982年人民议会第4号法令)罗伯特 译
  5. 鸿蒙是单线程还是多线程,鸿蒙 RT-Thread 两者之间究竟是不是竞争关系呢
  6. JavaScript对象、原型、原型链知识总结思维导图
  7. 如何实现控制台清屏?(借鉴)
  8. 【JSTL】--c:out演示--drp213
  9. Android学习笔记--JNI的使用方法
  10. hdu 5131 (2014广州现场赛 E题)