Preference直译为偏好,博友建议翻译为首选项。一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这样的情况,自己主动保存这些数据,并立时生效,同一时候Android提供一种类似的layout的方式来进行Prefernce的布局。

一个简单的Preferenece样例

步骤1:编写preference XML,在res/xml/下增加我们的preference XML文件,比如名字叫c21preference.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- preference的组织方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是带层次组织关系,在后面的样例体验,而PreferenceScreen就是最平白和基础的方式 -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 有四个基本组建,这个样例学习两个。里面的内容对比图,非常easy理解,RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 -->
    <CheckBoxPreference android:key="checkbox"
        android:title="CheckBox Preference"
        android:summary="Check it on , check it off"/>
    <RingtonePreference android:key="ringtone"
        android:title="Ringtone Preference"
        android:showDefault="true"
        android:showSilent="true"
        android:summary="Pick a tone, any tone"/>
</PreferenceScreen>

步骤2:在java源码中调用该xml,生成对应的preference界面

public class Chapter21Test1 extendsPreferenceActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.c21preference);
    }
}

和用layout方式一样,代码非常easy。和以往界面最大的差别是,我们对checkbox进行选择或者对ringtone进行选择后,这个选择结果是被保留的,当我们退出actitvity后再次进入,上次的选项依旧保留,我们又一次向模拟器load应用,发现之前的选项仍然存在。我们能够利用preference,而无须人工对数据进行保存和读取,非常是方便。

步骤3:获取preference的数据

处了在preference的界面中可以保留数据,我们也希望可以读出数据,以便这些数据可以用在其它的activity中。假设还有一个activity和这些数据关联,并且希望可以实时进行同步,在onResume()中对preference保留的数据进行读取,而后进行相关的更新。

首先要获取preferences,然后通过键值对的获取方式依据key获取数值,在xml中checkbox的key为“checkbox”,值的类型为布尔值,而rintong的值为String,比如:

protected void onResume() { //在还有一个Activity中
        super.onResume();
        SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
        System.out.println(new Boolean(prefs.getBoolean("checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
        System.out.println(prefs.getString("ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值
    }

获取preferences能够通过三种方式:
一、getPreferences():能够获取同一activity中的preference;
二、getSharedPreferences():能够获取映用级别的preferences(),在这个样例中因为我们封装在同一app中,也能够使用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);当中第一个參数name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():就是我们样例的方式,通过Android的偏好管理器来获取其所管理的preferences。

Preferenece数据的操作

在上面的样例中,preference的数值会被保留,并且能够在其它的activity中读取。假设须要清除数据,能够通过remove()清除某个名字的prefernece,clear()清除全部的preferences。我们能够通过edit()获取preferences的editor,进而进行编辑,改动后,通过commit()将改动值保存。

Preferenece XML

Preference的XML能够通过PreferenceCategory来进行组织。PreferenceCategory能够将几个组建组合在一起,并加上标题。我们依旧用前面的xml样例,通过PreferenceCategory来进行组织,例如以下:和之前的样例比較,将chekcbox和rintong组织成为一个category,并加上了"simple Preferences"的标题。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
       <PreferenceCategory android:title="Simple Preferences">
            <CheckBoxPreference android:key="checkbox" ..../>
            <RingtonePreference android:key="ringtone" ... />
       </PreferenceCategory>
</PreferenceScreen>

PreferenceCategory也能够嵌套PreferenceScreen,PreferenceScreen中的内容,将通过还有一屏来显示,我们在上面样例后面加入一个嵌套了PreferenceScreen的PreferenceCategory。整个PreferenceScreen作为一个组件出现,点击后新的一屏,由入PreferenceScreen定义。通过这个关系,我们能够组织自己的preference架构。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
       <PreferenceCategory android:title="Simple Preferences">
            <CheckBoxPreference android:key="checkbox" ..../>
            <RingtonePreference android:key="ringtone" ... />
       </PreferenceCategory>
       <PreferenceCategory android:title="Detail Screens">
           <PreferenceScreen android:title="Detail"
               android:summary="Addtional preference help in another page">
               <CheckBoxPreference android:key="checkbox2"
                   android:title="Another Checkbox"
                   android:summary="On or Off, It's a problem...."/>
           </PreferenceScreen>
       </PreferenceCategory>
</PreferenceScreen>

在前面的样例中我们使用了CheckBox和Ringtong,在以下的样例,我们实验另外的两个组建EditText和List,这两种都是已弹框的方式。在上面的样例我们继续添加内容

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen ...>
       ......     
       <PreferenceCategory android:title="Other Preferences">
           <EditTextPreference android:key="text"
               android:title="Text Entry Dialog"
               android:summary="Click to pop up a field for entry"
               android:dialogTitle="Enter something useful"/>
           <ListPreference android:key="list"
               android:title="Selection Dialog"
               android:summary="Click to pop yo a list for select"
               android:entries="@array/cities"
               android:entryValues="@array/airport_codes"

               android:dialogTitle="Choose a City"/>
       </PreferenceCategory>
</PreferenceScreen>

在list中由两个引用@array/cities和@array/airport_codes,我们在资源文件里定义此两array。内容例如以下:
<resource>
     <string-array>
        <item>Pittsburgh</item>
        <item>Allentown/Bethlehem</item>
        <item>Erie</item>
        ... ...
    </string-array>
    <string-array name="airport_codes">
        <item>PHL</item>
        <item>PIT</item>
        <item>ABE</item>
        ... ...
    </string-array>
</resources>

执行结果如右图所看到的。对于EditText,键值对保存的值是String,即用户在输入框中输入的内容。List的情况略微复杂一些,在设置ListPreference的属性有一个entires,这是在List显示给用户看的内容,假设我们去获取preference的值,在这个样例为prefs.getString("list", "<unset>");,则返回在entryValues相应的数值,比如我们选择了第一个item:Pittsburgh,则获取的值为PHL。entries和entryValues是一一相应的。

相关链接: 我的Android开发相关文章

转载于:https://www.cnblogs.com/blfshiye/p/4557317.html

Android学习笔记四十Preference使用相关推荐

  1. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  2. Android学习笔记(十五)——实战:强制下线

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 实现强制下线功能的思路也比较简单,只需要在界面上弹出一个对话框, 让用户无法进行任何其他操作, 必须要点击对话 ...

  3. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  4. Pro Android学习笔记 四八 ActionBar 1 Home图标区

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Acti ...

  5. Android学习笔记(十)——Activity的四种启动模式

    Standard标准模式 每启动一个Activity就创建一个新的实例,不管这个activity之前是否启动过,都创建一个新的 singleTop栈顶复用模式 singleTask栈内复用模式 sin ...

  6. Android学习笔记六十:无线 WIFI 的13个信道频率范围

    出处:http://cnzhx.net/blog/13-channels-of-wifi/ 目前主流的无线WIFI网络设备不管是802.11b/g还是802.11b/g/n 一般都支持13个信道.它们 ...

  7. windows内核开发学习笔记四十四:注册表存储结构-储巢

    上一篇文章学习了注册表的逻辑结构,接下来我这篇文章来学习注册表的存储结构.注册表实际存储是由一组储巢构成,每个储巢包含了一个由键和值构成的层次结构.下面表是windows的各个储巢的注册表路径和文件路 ...

  8. Android 学习笔记四:创建工具栏按钮

    原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏 ...

  9. [Android学习笔记四] 自定义Android组件之组合方式创建密码框组件

    Android中所有控件(也称组件)都继承自adnroid.view.View类,android.view.ViewGroup是View类的重要子类,绝大多书的布局类就继承自ViewGroup类. 参 ...

最新文章

  1. CentOS6.5 编译安装zabbix3.0.5,编译安装zabbix_agent客户端
  2. 重磅!李飞飞 CS231n 最全学霸笔记精炼版来了
  3. 一、自然语言处理概述
  4. Java中Collection与Collections的区别
  5. 1087 有多少不同的值 (20 分)
  6. [ASP.NET AJAX]类似.NET框架的JavaScript扩展
  7. Sublime text3 代码格式化插件vue
  8. Struts2 访问上下问对象
  9. 如何编写Ruby控制台程序(一)
  10. java开发利器 eclipse从入门到精通 pdf_Java从入门到精通(第4版)高清PDF下载
  11. Luogu3444:[POI2006]ORK-Ploughing
  12. RocketMQ如何维持心跳
  13. 电子计算机与多谋种,2011—2012学年度第一学期七年级上册语文期末测试AB卷(2套)(含答案)...
  14. ArcGIS中的标注和注记 Label Annotation in ArcGIS
  15. java 未读消息_javaweb未读消息提醒
  16. iphone4S 怎么激活?
  17. 黑金核心板32bitDDR3 MIG核UI接口仿真模型搭建
  18. Quartus-建立新工程
  19. java-php-python-晨光文具店进销存系统设计与开发计算机毕业设计
  20. 大数据开发中HBase高级特性和rowkey设计分析

热门文章

  1. ElasticSearch第一天
  2. 我是技术总监,你干嘛总问我技术细节?
  3. linux修改网卡文件夹,CentOS7 修改网卡名称为eth0在VMWare中添加多网卡配置
  4. 干活|常见WAF拦截页面总结
  5. Python断言方法:assert
  6. jquery获取当前的节点
  7. ArcGis中空间连接join
  8. Scrapy保存到txt文件或者数据库里面
  9. BTrace使用小结
  10. Eclipse安装STS(Spring Tool Suite (STS) for Eclipse)插件