Android学习笔记四十Preference使用
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"?> |
![]() |
![]() |
在前面的样例中我们使用了CheckBox和Ringtong,在以下的样例,我们实验另外的两个组建EditText和List,这两种都是已弹框的方式。在上面的样例我们继续添加内容
|
<?xml version="1.0" encoding="utf-8"?> |
在list中由两个引用@array/cities和@array/airport_codes,我们在资源文件里定义此两array。内容例如以下: |

执行结果如右图所看到的。对于EditText,键值对保存的值是String,即用户在输入框中输入的内容。List的情况略微复杂一些,在设置ListPreference的属性有一个entires,这是在List显示给用户看的内容,假设我们去获取preference的值,在这个样例为prefs.getString("list", "<unset>");,则返回在entryValues相应的数值,比如我们选择了第一个item:Pittsburgh,则获取的值为PHL。entries和entryValues是一一相应的。
相关链接: 我的Android开发相关文章
Android学习笔记四十Preference使用的更多相关文章
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- 【转】Pro Android学习笔记(十):了解Intent(上)
目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...
- Android学习笔记(十四)——自定义广播
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 我们除了可以通过广播接收器来接收系统广播, 还可以在应用程序中发送自定义的广播.下面我们来分别试一试发送自定义 ...
- Android学习笔记(十六)——数据库操作(上)
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, ...
- Android学习笔记(十五)——实战:强制下线
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 实现强制下线功能的思路也比较简单,只需要在界面上弹出一个对话框, 让用户无法进行任何其他操作, 必须要点击对话 ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
- Android学习笔记(十九)——内容提供器
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整 ...
随机推荐
- 关于iptables的u32匹配
前面一篇文章----阐释了iptables最新的bpf match,说它将多个matches并成了一个经过编译的解释型bytecode bpf match,早在bpf match之前,u32 matc ...
- Unable to instantiate activity ComponentInfo或java.lang.ClassNotFoundException: com.ibright.herolegen
不知道怎么回事,在libs中添加了jar包后,无法给jar包附加上源码,于是采取以下措施: 删除自动生成的依赖: 在Android Dependences目录上右击->Build Path -& ...
- 改变Edit的光标(使用CreateCaret,ShowCaret和LoadBitmap三个API函数)
看着Edit的光标,是不是觉得了无生趣,想不想换个形状来玩玩,其实很简单,且听我道来. Edit是Windows的标准控件,它是一个系统范围窗口类,所以任何应用程序都能创建它.其实Edit本质上也是一 ...
- 总结showModalDialog在开发中的一些问题
一.在页面调用window.open()函数后,可以直接在打开的页面中用window.opener来调用父页面的方法,然而如果用showModalDialog打开一个模态窗口,就不能通过window. ...
- IE6下position:fixed不支持问题及其解决方式
IE6有诸多奇葩,不支持position:fixed就是当中之中的一个.所以在做一些比方固定在顶部或者底部或者固定元素的效果时须要考虑兼容IE6的这个问题.解决方式是用Ie6的hack. *html ...
- MySQL HINT:Straight_JOIN
来自生产环境的朋友.可能都会碰到: 原本运行良好的查询语句,过了一段时间后,可能会突然变得很糟糕 一个很大可能的原因就是数据分布情况发生了变化 从而导致MySQL优化 ...
- 开源mp3播放器--madplay 编译和移植 简记
madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...
- Copy xml 文件
public static void copyFailFile(String bugID) throws Exception { File file = new File(".") ...
- 激动啊,终于诞生了,编译了属于俺自己的 JDK
激动啊,终于诞生了,编译了属于俺自己的 JDK 折腾了2天,现在编译过去了 30多分钟了,久违的 java.exe 终于出现在了 bin 目录中,属于俺自己的 JDK 终于诞生了,激动啊
- hdu-1016素数环
这个题就是给出一个数字n,表示有n个数.编号为1~n. 然后要求我们将这n个数连起来变成一个环,要求随意两个数相加所得值必须为素数. 假设满足条件就将这个环输出来! 这个题:dfs+回溯+推断.然后注 ...



