我想大家对于android的系统配置界面应该不会陌生吧,即便陌生,那么下面的界面应该似曾相识吧,假若还是不认识,那么也没有关系,我们这一节主要就是介绍并讲解android 中系统配置界面的使用,相信大家看完本节后,一定能知道怎么使用这些东西了。

从上述界面中(其实是一个界面),我们可以看到有2组元素,第一组为:自动更新,更新频率。第二组为:是否登录,账号,密码。

其实分组是为了方便管理而已。这里主要使用到了选择,列表,编辑框等Preference.

我们还是来温习下基础知识吧。

一.基础知识

通常我们开发一个程序时,会需要给用户提供一个设置界面,使用户可以对程序的一些参数进行设置。通常我们使用Preferences的键值对存储方式,来对Android数据持久化。

android.content.SharedPreferences是一个接口,用来获取和修改持久化存储的数据。有三种方式可以获取系统中持久化的数据,这些数据时存放在.xml中的:

1:public SharedPreferences getPreferences (int mode),只隶属于activity对象,并以这个对象为文件名。

2:public SharedPreferences getSharedPreferences (String name, int mode),隶属于整个应用,以name名称保存。

3:public static SharedPreferences getDefaultSharedPreferences (Context context),隶属于整个应用,保存PreferenceActivity中的设置,根据包名和PreferenceActivity的布局文件来起一个名字保存。

SharedPreferences可以保存Boolean、Int、Float、Long、String等类型。一般是SharedPreferences.Editor的putXXX()方法保存,并commit()方法提交;或者是remove(),方法移除,clear()方法清空,当然操作完毕后需要commit()方法提交。

一般的,可以使用SharedPreferences保存持久化数据,比如登陆账号,密码,以及相对固定设置参数等等,看你应用需要。

既然使用到设置参数界面,那么我们可以来认识下一下几个类标签:

1:PreferenceScreen 持久化设置界面的顶级容器,代表一屏,里面可以嵌套屏幕,嵌套的时候可以点击跳转到另外一屏。

2:PreferenceCategory 当前屏的分组容器,说白了,就是为了划分组而已。

3:CheckBoxPreference,ListPreference,EditTextPreference等等组件。这些都是常见的对应上述的选择标签、列表标签、编辑标签。

上述组件都有titile,summary,key属性。title标题描述,summary:详细描述,key:保存SharedPreferences时候的键。

二.实战

既然有了上述基础知识后,我们就可以来做如上的设置界面了,在上述界面中,我们知道当前配置界面只需一屏,没有额外的跳转,那么需要PreferenceScreen,不需要嵌套其他PreferenceScreen,而设置界面分为两栏,那么需要两个PreferenceCategory,并且这个PreferenceCategory可以设置标题。同时根据界面,我们还需要CheckBoxPreference,ListPreference,EditTextPreference等。操作如图:

当然了,我们还是实际操作下吧,然后实际联系理论(理论联系实际太抽象),我们首先编写使用工具选择标签,然后形成代码,存放在xml文件夹中,如下:

View Code

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"    android:title="@string/setting" ><PreferenceCategory android:title="@string/update" ><CheckBoxPreferenceandroid:key="@string/update_key"            android:summaryOn="@string/auto_update_switch_summary_on"            android:summaryOff="@string/auto_update_switch_summary_off"            android:summary="@string/auto_update_setting"            android:title="@string/auto_update_switch_title"            android:defaultValue="true"/><ListPreferenceandroid:key="@string/auto_update_frequency_key"            android:dialogTitle="@string/auto_update_frequency_title"            android:entries="@array/auto_frequency_name"            android:entryValues="@array/auto_frequency_value"            android:negativeButtonText="@string/cancel"            android:summary="@string/auto_update_frequency_summary"            android:title="@string/auto_update_frequency_title" /></PreferenceCategory><PreferenceCategory android:title="@string/other" ><CheckBoxPreferenceandroid:key="@string/isneilflag_key"            android:title="@string/isneilflag"             android:disableDependentsState="true"/><EditTextPreferenceandroid:dependency="@string/isneilflag_key"            android:key="@string/username_key"            android:summary="@string/username_summary"            android:title="@string/username" /><EditTextPreferenceandroid:dependency="@string/isneilflag_key"            android:key="@string/password_key"            android:summary="@string/password_summary"            android:title="@string/password" /></PreferenceCategory></PreferenceScreen>

当然这里使用到了一些文件,代码一并释放:

View Code

<?xml version="1.0" encoding="utf-8"?><resources>

<string name="hello">Hello World, PreferenceActivityDemoActivity!</string><string name="app_name">PreferenceActivityDemo</string><string name="cancel">取消</string><string name="other">其他</string><string name="setting">设置</string><string name="update">更新</string><string name="auto_update_switch_title">自动更新</string><string name="auto_update_setting">自动更新设置</string>  <string name="auto_update_switch_summary_on">开启自动更新</string>  <string name="auto_update_switch_summary_off">关闭自动更新</string>  <string name="auto_update_frequency_title">更新频率</string>  <string name="auto_update_frequency_summary">设置更新周期</string> 

<string name="isneilflag">是否匿名登录</string><string name="username">帐号</string>  <string name="password">密码</string><string name="username_summary">提供您帐号</string>  <string name="password_summary">提供您密码</string>  

<string name="update_key">update_key</string><string name="auto_update_frequency_key">auto_update_frequency_key</string> <string name="isneilflag_key">isneilflag_key</string>  <string name="username_key">username_key</string>  <string name="password_key">password_key</string>  </resources>

View Code

<?xml version="1.0" encoding="utf-8"?><resources><string-array name="auto_frequency_name"><item>10分钟</item>  <item>30分钟</item>  <item>1小时</item>  <item>12小时</item></string-array>

<string-array name="auto_frequency_value"><item>10</item>  <item>30</item>  <item>60</item>  <item>720</item> </string-array></resources>

接下来,我们就来解释下xml文件夹中设置文件的一些内容吧:

android:key="@string/update_key"   这个是我们持久化时SharedPreferences保存的键,
            android:summaryOn="@string/auto_update_switch_summary_on"     选中后显示内容
            android:summaryOff="@string/auto_update_switch_summary_off"     未选中后显示内容
            android:summary="@string/auto_update_setting"                             平常状态显示内容
            android:title="@string/auto_update_switch_title"                               标题
            android:defaultValue="true"                                                             默认值
  android:dialogTitle="@string/auto_update_frequency_title"                           对话框标题
            android:entries="@array/auto_frequency_name"                                列表项显示名称
            android:entryValues="@array/auto_frequency_value"                          列表项值

android:disableDependentsState="true"          当CheckBoxPreference的值为真的时候,禁用依赖于该设置的其他设置项。

android:dependency="@string/isneilflag_key"  根据上述设置依赖于CheckBoxPreference的真值进行启用与禁用。

注意:我们可以从上图知道ListPreference是继承之Preference,以及DialogPreference的,那么就有它们的属性以及方法了。

好了,设置界面已经定义完成,我们来定义一个activity继承之PreferenceActivity,并使之显示吧。

当然噩梦可以再使之继承接口OnPreferenceChangeListener,OnPreferenceClickListener,当PreferenceActivity中的某一个Preference进行了点击或者改变的操作时,都会回调接口中的函数。

具体代码如下:

View Code

package com.dongzi;

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.Preference.OnPreferenceClickListener;import android.preference.PreferenceManager;import android.preference.PreferenceActivity;import android.util.Log;public class PreferenceActivityDemoActivity extends PreferenceActivity implements OnPreferenceChangeListener,OnPreferenceClickListener{static final String TAG="PreferenceActivityDemoActivity";    SharedPreferences preference=null;    CheckBoxPreference updateCheckBoxPreference=null;    ListPreference lististPreference=null;    CheckBoxPreference  isneilflag_CheckBoxPreference=null;    EditTextPreference usernameEditTextPreference=null;    EditTextPreference passwordEditTextPreference=null;    @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置显示Preferences        addPreferencesFromResource(R.xml.preference);//获得SharedPreferences        preference=PreferenceManager.getDefaultSharedPreferences(this);

//找到preference对应的Key标签并转化        updateCheckBoxPreference=(CheckBoxPreference)findPreference(getString(R.string.update_key));        lististPreference=(ListPreference)findPreference(getString(R.string.auto_update_frequency_key));        isneilflag_CheckBoxPreference=(CheckBoxPreference)findPreference(getString(R.string.isneilflag_key));        usernameEditTextPreference=(EditTextPreference)findPreference(getString(R.string.username_key));        passwordEditTextPreference=(EditTextPreference)findPreference(getString(R.string.password_key));//为Preference注册监听        updateCheckBoxPreference.setOnPreferenceChangeListener(this);        updateCheckBoxPreference.setOnPreferenceClickListener(this);

        lististPreference.setOnPreferenceClickListener(this);        lististPreference.setOnPreferenceChangeListener(this);

        isneilflag_CheckBoxPreference.setOnPreferenceChangeListener(this);        isneilflag_CheckBoxPreference.setOnPreferenceClickListener(this);

        usernameEditTextPreference.setOnPreferenceChangeListener(this);        passwordEditTextPreference.setOnPreferenceChangeListener(this);    }    @Overridepublic boolean onPreferenceClick(Preference preference) {//判断是哪个Preference改变了          if(preference.getKey().equals(getString(R.string.update_key))){             Log.e(TAG, getString(R.string.update_key));         }else if(preference.getKey().equals(getString(R.string.isneilflag_key))){             Log.e(TAG, getString(R.string.isneilflag_key));         }//返回true表示允许改变          return true;      }    @Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {//判断是哪个Preference改变了          if(preference.getKey().equals(getString(R.string.username_key))){//账号             Log.e(TAG, getString(R.string.username_key));          }else if(preference.getKey().equals(getString(R.string.password_key))){//密码             Log.e(TAG, getString(R.string.password_key));

         }else if(preference.getKey().equals(getString(R.string.auto_update_frequency_key))){//列表             Log.e(TAG, getString(R.string.auto_update_frequency_key));         }//返回true表示允许改变          return true;      }}

从上述代码可知:

1:设置显示Preferences可以调用方法addPreferencesFromResource(R.xml.preference); 传递preference文件即可。

2:然后通过findPreference();方法找到键的类标签

3:我们定义2个监听接口监听参数是否设置成功。

4:在监听接口中返回true就是设置允许提交。

结果打印如下:

成功!

也许你会问,我们这里并没有使用

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);

settings.getXXXX();settings.putXXXX();以及commit()等方法,设置、获取并提交值啊?!是的,在这里我们不需这样,因为

当PreferenceActivity中的内容改变时,Android系统会自动进行保存和持久化维护,我们只需要在要用的设置界面中数据的地方进行读取就可以了。

当然,您可以在其他界面使用SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);等类方法来获取数据,看能不能获取到

<linker : http://www.cnblogs.com/zhangdongzi/archive/2012/01/05/2313519.html>

转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3338547.html

Android PreferenceActivity 使用相关推荐

  1. android 切换 preferencefragment,Android PreferenceActivity与PreferenceFragment详解及简单实例_Android_脚本之家...

    Android  PreferenceActivity与PreferenceFragment 前言 转来转去又回到了Android,闲话少说,这里是参考Android原生的Settings应用来介绍一 ...

  2. android PreferenceActivity详解

    原帖地址:http://gundumw100.iteye.com/blog/904097 为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢? 根据已学 ...

  3. android preferenceactivity 源码,PreferenceActivity PreferenceScreen (3.0/API 11 以前)

    Android提供了一个XML驱动的框架,用于为应用程序创建系统样式的PreferenceScreen. (3.0/API 11 以前)是这样使用的 看代码: mypreference.xml and ...

  4. android preferenceActivity的用法

    首先让大家看图  看到这张图是 不是很熟悉 我想大家应该会好奇他是怎么实现  咋一看是不是觉得实现起来有点困难 因为各个按钮之间会绑定牵连在一起 原来android内部提供更容易的实现他的方法 也就是 ...

  5. android preference 启动activity,Android PreferenceActivity 学习笔记

    在Ap中有时需要设置一些配置参数,这些参数通过配置文件保存. 为了设置这些参数,需要提供一个UI,针对这种需求,Android提供了preferenceActivity. PreferenceActi ...

  6. Android Settings开发之修改

    版本:1.0 日期:2014.3.20  2014.3.25   版权:© 2014 kince 转载注明出处                下面是Seeings应用的截图:   可以看出这是很典型的 ...

  7. Android实战技巧之六:PreferenceActivity使用详解

    一.写作前面 当我们做应用的时候,需要用户配置一些信息,而这就是通常所说的应用设置. 对于Android系统来说,系统本身的设置带来的用户体验和习惯已经深入人心,在我们的应用中同样用到类似的设置页, ...

  8. Android开发--详解SharedPreference/PreferenceActivity

    我们经常看到应用程序的设置页面,一般用到设置页面时,我们会继承自PreferenceActivity,它实现了SharedPreference,并生成相应的XML文件自动保存用户的设置,在设置页面中, ...

  9. Android’s PreferenceActivity for all API versions

    官方文档 I have spent the last few days learning about how to use the new Android PreferenceFragment whi ...

最新文章

  1. R绘制堆叠的密度图(Stacked Area Chart)
  2. MongoDB的学习--聚合
  3. Linux系统工程师的必备素质
  4. python大数据分析实例-Python大数据处理案例
  5. 学习参数传递及const成员变量初始化
  6. 人工智能实现a*算法解决八数码_小白带你学回溯算法
  7. 怎么把java程序放进php_如何在php脚本中执行Java程序?
  8. CAS和Synchronized知识
  9. JavaEE实战班第十四天
  10. 俞渝发内部信:呼吁员工发微博、发朋友圈保卫当当
  11. 《剑指offer》面试题5———从尾到头打印链表(C++ 实现)
  12. 人工智能简史—学习笔记
  13. 宋佳乐和郭晓婷天津之眼观景照片
  14. Java生成安全随机密码
  15. 如何判断iPhone5 iPhone 5S iPhone6 iPhone6 plus?
  16. Flutter混合栈管理
  17. Good Bye 2020 B
  18. 「环卫吸粪车」天河区抽化粪池抽泥浆抽污水来了,解决黑臭水体!
  19. 我们为什么选择NEXTCHIP?为什么要选择ISP?为什么要选择AHD?为什么选择北京冠宇铭通?
  20. 计组——彻底搞懂cache主存映射以及cache容量的计算

热门文章

  1. 如何使用CNN进行物体识别和分类_可能我们之前都想错了:CNN的图像分类策略其实出奇的简单呢!...
  2. win 2016 ssh_多台WIN10之间的SSH免密登录
  3. OSI七层网络模型与TCP/IP四层网络模型
  4. go 二进制程序守护_图解 Go 程序是怎样跑起来的
  5. matlab 安装jdbc.jar
  6. java 数组 内存_图解Java数组的内存分配
  7. 汽车电子专业知识篇(二)-汽车以太网如何影响ECU和传感器设计
  8. 机器学习从入门到精通50讲(一)-大数据平台下的数据质量管理
  9. ssm异常捕获和处理
  10. linux wenj 立即生效_【新书连载】测试工程师核心开发技术(3)—远程登录Linux系统...