Android Preference使用
- 摘要:AndroidPreference经常使用在例如设置的功能,Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,这种就是使用androidsharedpreferences方式进行保存的,不需要我们手动来写,下面的图片就是使用Preference来进行保存的添加一个简单的Preference添加一个Preference很简单,首先看下图片我们在res目录下添加一个xml目录,里面添加一个itchq文件
- 标签:android 使用 Preference
Android Preference经常使用在例如设置的功能,Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,这种就是使用android sharedpreferences方式进行保存的,不需要我们手动来写,下面的图片就是使用Preference来进行保存的
添加一个简单的Preference
添加一个Preference很简单,首先看下图片
我们在res目录下添加一个xml目录,里面添加一个itchq文件,这个文件相当于我们的Preference布局文件
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" ><CheckBoxPreference android:key="checkbox"android:title="CheckBoxPreference"android:summary="check it box"/><RingtonePreferenceandroid:key="ring"android:title="ringtone"android:summary="check a ringtone"/> </PreferenceScreen>
这个就是itchq.xml里面的代码,这里面的东西往下有介绍。我们再来看看那个Activity里面如何使用的
package com.itchq.itchqpreference; import com.itchq.itchqpreference.R;import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.PreferenceActivity; import android.preference.RingtonePreference;public class ItChqActivity extends PreferenceActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.itchq);}}
上面的就是Activity的代码,这个Activity不是继承Activity这个类的而是PreferenceActivity,其实这个看字面的意思就是Activity的继承子类,用法和Activity差不多相同的,在Activity中使用setContentView()方法来加载一个布局文件,在这里使用的是addPreferencesFromResource()方法来加载布局文件,既然是Activity就不要忘记在AndroidManifast.xml添加相应的配置,上面的运行结果如下图
preference 通用的xml 布局属性
在preference布局文件中,我们可以会经常用到下面的属性,这些属性都是preference控件相互通用的。
android:key 这个属性相当于android:id的作用。用此key来唯一表示此Preference
android:title Preference的标题,
android:summary 表示Preference提示语,相对于android:title来说显示要小点,而且显示位置在android:title下面
android:defaultValue 这个表示的是默认值,比如CheclPreference这种preference就可以指定默认是"true"还是“false”
android:enabled 表示该Preference是否可用状态
PreferenceScreen
preferenceScreen简单的说就是所有Preference元素的根节点,我们可以看做是每一个PrederenceActivity布局的开始元素,当然这个PreferenceScreen也可以作为一个组件出现,里面可以嵌套其它组件,那么这个将会以另外的一屏显示出来,就是当我们点击后出现一个新的屏幕
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" ><CheckBoxPreference android:key="checkbox"android:title="CheckBoxPreference"android:summary="check it box"/><RingtonePreferenceandroid:key="ring"android:title="ringtone"android:summary="check a ringtone"/><PreferenceScreen android:key="screen"android:title="PreferenceScreen"android:summary="screen it"><SwitchPreferenceandroid:key="switch"android:title="switchPreference"android:summary="switch it"/><EditTextPreferenceandroid:key="edit"android:title="editPreference"android:summary="OK"/></PreferenceScreen> </PreferenceScreen>
如上面的代码里面有一个PreferenceScreen,这个PreferenceScreen里面嵌套了SwitchPreference和EditTextPreference,android:key相当android:id,我们到时候通过这个在Activity中找到对应的组件,android:title就是标题,android:summary就是这个一个提示语,这三个属性都是最基本的信息,看下图:
上面图片中最后一项就是我们添加的,“PreferenceScreen”就是我们的android:title,“screen it”就是这个android:summary,那么当我们点击这个选项时就会跳转到一个新的页面,页面显示如下图:
这个就是上面的在PreferenceScreen中嵌套的两个组件,SwitchPreference和EditTextPreference
PreferenceCategory
PreferenceCategory 这个控件类似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局看起来具有层次关系,美观
<PreferenceCategory android:key="category"android:title="PreferenceCategory"><EditTextPreferenceandroid:key="edit"android:title="category"android:summary="OK"/></PreferenceCategory>
如上图中Category前面有一天很大的线,这个就是使用了PreferenceCategory效果。
Preference这个控件这里简单介绍一下,这个就和我们的TextView是一样的,就是显示一个文本
ListPreference
ListPreference这个就是显示一个相当的list,先看下面的代码
<ListPreference android:key="list"android:title="Options"android:entries="@array/entry_list" android:entryValues="@array/values_list"android:dialogTitle="list dialogtitle"android:defaultValue="1"/>
我们可以看到在这个代码中android:entries属性表示的就是这个listView对话框控件欲显示的文本,android:entryValues与文本相对应的key-value键值对,value保存至sharedPreference文件,而我们的entries和entryValue属性使用的数组定义在资源文件arrays.xml的数组名,我们来看看arrays.xml文件的定义
<resources><string-array name="entry_list"><item>total</item><item>check</item><item>airplace</item></string-array><string-array name="values_list"><item>0</item><item>1</item><item>2</item></string-array> </resources>
这个就是arrays.xml文件的定义,android:dialogTitle是指这个list弹出框的文本,android:defauleValues表示在缺省条件下显示哪个值,这个值对应的是values_list的值,我们先来看看效果
如图这个Options就是我们要ListPreference,当我们点击这个之后显示效果如下图:
看到了把,我们的这个dialog形式来显示listView的,默认android:defaultValues=“1”就是对应第二个"check",这个标题就是android:dialogTitle设置的
CheckBoxPreference
checkBoxPreference这个相当于checkBox,是一个多选,先看代码
<CheckBoxPreference android:key="checkbox_one"android:title="checbox_one"android:summaryOn="On_check_one"android:summaryOff="offcheck_one"/><CheckBoxPreferenceandroid:key="checkbox_two"android:summaryOff="offcheck_two"android:summaryOn="On_check_two"android:title="checbox_two" /><CheckBoxPreferenceandroid:key="checkbox_three"android:summaryOff="offcheck_three"android:summaryOn="On_check_three"android:title="checbox_three" />
android:summaryOn和android:summaryOff表示在选择和不选择分别显示的summary,运行效果图如下:
当我们选择checkbox_one是下面的offcheck_one提示就会修改为On_check_one
EditTextPreference
等同于EditText,相关的代码显示如下:
<EditTextPreference android:key="edit"android:title="Set Package Name"android:summary="Set the Package Name"android:dialogTitle="Package Name:" />
当我们点击下面的“Set Package Name“的时候就会弹出这么一个文本对话框,”Package Name“就是这个android:dialogTitle的属性
RingtonePreference
这个是一个铃声选项的功能,用得比较少不做介绍
MultiSelectListPreference
它的实现和ListPreference相似,不同的是还可以不选择或者多个选择,代码是和ListPreference一样的,运行效果如下图:
从上面一些基本的Preference控件已经差不多介绍完了,下面再来介绍一个有关于点击和存储的功能使用:
首先来介绍一下如何在我们的PreferenceActivity中找到我们的控件,我们在Activity是通过findViewById()来找到我们指定的控件的,那么在PreferenceActivity中我们可以使用findPreference这个方法来找到指定的方法,用法如下:
mCheck=(CheckBoxPreference) findPreference("checkbox");mRing=(RingtonePreference) findPreference("ring");
findPreference里面的参数就是我们使用android:key所定义的,这个应该容易理解。
在PreferenceActivity方法中,一个比较重要的监听点击事件方法为
@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference) {// TODO Auto-generated method stubreturn true;}
参数 preference 表示的是点击的对象,在我们继承PreferenceActivity可以重写该方法,来完成我们对Preference事件的捕捉,用法如下
@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference) {// TODO Auto-generated method stubif(preference.getKey().equals("checkbox")){Log.i("itchq", "checkbox");}return true;}
除了上面这个监听的方法之外,还有两个重要的接口:
OnPreferenceChangeListener
当Preference的元素值发送改变时,触发该事件,记住只有元素值改变才会触发这个值,返回值为true 表示将新值写入sharedPreference文件中
false 则不将新值写入sharedPreference文件
@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {// TODO Auto-generated method stubreturn false;}
OnPreferenceClickListener
当点击控件时触发发生,可以做相应操作
@Overridepublic boolean onPreferenceClick(Preference preference) {// TODO Auto-generated method stubreturn false;}
那么这三个点击事件在一起是什么用的呢?它的规则如下:
点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值(这个下面会讲解这个值是如何保存的),然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我们得到的控件值就是最新的Preference控件值。然后onPreferenceClick会比onPreferenceTreeClick()方法先调用,如果onPreferenceClick方法返回true,那就不会再调用onPreferenceTreeClick()方法,如果onPreferenceClick()返回false就会继续调用onPreferenceTreeClick()方法
数据的保存
前面我们说过,Android系统会将Preference元素的值存储在sharedPreference文件中。该文件存放路径位于 DDMS视图下的data/data/[packgename]/shared_prefs/文件下,命名约定为:packagename_preferencse.xml 如下图:
那么我们要如何去获取这些已经保存的数据呢?首先我们要通过xml中的key获取数值,就是Preference控件中android:key所对应的属性(已一个键值对的形式保存,name为Preference的key值,value为Preference的value值),读取方法如下:
SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;Log.i("itchq", "checbox="+prefs.getBoolean("checkbox",false));
我们通过getDefaultSharedPreferences()方法来读取的,”checkbox“就是我们CheckBoxPreference所定义的android:key属性值,这样是不是很方便,我们都不需要手动取保存这个对应的值,只要直接去取就可以了。preference的数值会被保留,而且可以在其他的 activity中读取。如果需要清除数据,可以通过remove()清除某个名字的prefernece,clear()清除所有的 preferences。我们可以通过edit()获取preferences的editor,进而进行编辑,修改后,通过commit()将修改值保存。
Android Preference使用相关推荐
- Android Preference 须知
Android Preference 须知 一.理论 1.前言 在Android的应用开发中经常会涉及到设置界面的设计开发,为此Android提供了名为Preference的设置处理机制,沿用这种机制 ...
- Android Preference 的使用
设置(Settings) 应用程序通常包括允许用户修改应用程序的特性和行为的设置功能.例如,一些应用程序允许用户指定通知是否启用或指定多久使用云同步数据.如果你想要 为你的应用程序提供设置,你应该使用 ...
- android preference 启动activity,Android PreferenceActivity 学习笔记
在Ap中有时需要设置一些配置参数,这些参数通过配置文件保存. 为了设置这些参数,需要提供一个UI,针对这种需求,Android提供了preferenceActivity. PreferenceActi ...
- android Preference以及监听事件学习
[size=medium][b]基础知识[/b][/size] 在Android系统源码中,[color=red]绝大多数应用程序的UI布局采用了Preference的布局结构[/color],而不是 ...
- Android Preference 知识点
0介绍 Android系统内的设置界面由Android Preference相关类提供,使用preference这个键值对的方式来自动保存这些数据,并即时生效,同时Android提供一种类似layou ...
- Android Preference详解之初识Preference及Preference系(一)
Android Preference详解之初识Preference及Preference系(一) 转载:https://blog.csdn.net/google_huchun/article/deta ...
- android preference控件,Android Preference 设置项简单使用详解
Preference 是Android App 中重要的控件之一,Settings 模块大部分都是通过 Preference 实现的. 使用方法 一般在 XML 文件夹中创建 xml 文件来对 Set ...
- Android preference API使用总结
转载请注明出处:http://blog.csdn.net/htwhtw123/article/details/79166947 在开发Android应用设置的界面时,往往会使用Android的Pref ...
- Android Preference 调用setDefaultValue设置默认值不生效;应该使用setValueIndex
Android Preference 调用setDefaultValue设置默认值不生效:应该使用setValueIndex 如题,希望在ListPreference中设置一个默认值,且不能被设置为其 ...
最新文章
- 灭霸来了!微软发布BugLab:无需标注,GAN掉bug
- BZOJ Tyvj 1729 文艺平衡树
- XLSReadWriteII5使用参考
- Linux Socket编程的一些总结
- [Js代码风格]浅析模块模式
- 【转载】用廉价的315M遥控模块实现数据传输
- mysql mode_MYSQL中的sql_mode模式
- mapxtreme java_MapXtreme Java Edition 4.8使用心得(二)
- 小学计算机专业说课稿模板,小学信息技术说课稿集锦
- PROFINET协议
- 案例|工业物联网解决方案·智慧钢厂高性能安全数采
- 一个农村博士的独白:全家为什么只有我读到了博士
- 深入理解OkHttp3:(六)Https
- android4.4风格,Android 4.4消息汇总 扁平化风格来袭
- java http range_断点续传 HTTP range requests
- Unity SKFramework框架(十七)、FreeCameraController 上帝视角/自由视角相机控制脚本
- 江苏农村商业银行计算机类笔试考什么时候,2020江苏农商行春季校园招聘笔试考什么?...
- 手机上哪款闹钟提醒APP好
- Android视频开发进阶(part2-MP4文件的解析)
- Windows域环境使用教程实验