Android Preference详解
转载请标明出处:ttp://blog.csdn.net/sk719887916/article/details/42437253
Preference 用来管理应用程序的偏好设置和保证使用这些的每个应用程序的所有参数 拥有同样的方式和用户体验 并且系统和其他应用程序的UI保持偏一致。
一个应用程序的偏好部分应作为一个独立的活动扩展preferenceactivity类 类中的对象应该是preferencescreen ,preferencescreen包含偏好等元素的布局的根元素 比如checkboxpreference ,EditTextPreference, ListPreference, PreferenceCategory, RingtonePreference.
对于一个给定的偏好设置将自动保存到SharedPreferences , 拿到SharedPreferences应用实例的很简单getsharedpreferences();值的注意的是保存首选项只能由创建的应用程序去操作。
android 3.0以下版本,必须使用PreferenceActivity类来构建。 高于或等于android 3.0版本
使用PreferenceFragment。当然设备屏幕如果足够大的话还是可以使用PreferenceActivity创建双面板布局来显示多组设置
安卓给我们提供了一下接口:
接口定义一个回调时调用的值Preference由用户改变了,是吗 关于设置和/或持久化。 |
|
接口定义一个回调时被调用Preference是 点击。 |
|
接口定义一个类时,将调用容器的活动 被摧毁。 |
|
接口定义一个类时,将调用容器的活动 接收到一个活动的结果。 |
|
接口定义一个类时,将调用容器的活动 是停止了。 |
也定义了如下api:
一个Preference提供checkbox小部件 功能。 |
|
一个基类Preference对象 基于对话框的。 |
|
一个Preference允许字符串 输入。 |
|
一个Preference显示条目的列表 一个对话框。 |
|
Preference |
代表的基本UI构建的偏好 块显示的PreferenceActivity的形式ListView。 |
一个基类来管理实例的状态Preference。 |
|
显示了一个层次Preference对象作为 列表,可能跨越多个屏幕。 |
|
用于集团Preference对象 并提供一个残疾人标题上面。 |
|
一个容器为多个Preference对象。 |
|
用于帮助创建Preference层次结构 从活动或XML。 |
|
代表一个顶级Preference那 是优先的层次结构的根。 |
|
一个Preference允许用户选择从这些设备上的铃声。 |
1 Preference
可实现的接口
Preference.OnPreferenceChangeListener(偏好值已更改的用户和改变的时候
调用) Preference.OnPreferenceClickListener(偏好设置被点击的时候调用
)
装载请标明出处::http://blog.csdn.net/sk719887916
2.Preference元素的通用XML Attributes:
android:key : key:唯一标识,SharedPreferences也将通过此Key值进行数据保存,也可以通过key值获取保存的信息 。
android:defaultValue : 默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态。
android:enabled : 表示该Preference是否可用状态。
android:title : 每个Preference在PreferenceScreen布局上显示的标题——大标题
android:summary : 每个Preference在PreferenceScreen布局上显示的标题——小标题(可以没有)
android:persistent: 表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值。
android:layout:
在一个preferenceactivity的偏好布局 用于填充view
android:dependency: 表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用,
则A可用;B不可用,则A不可用。
android:icon:
偏好图标 对于偏好选择图标必须是一个引用到另一个资源的形式或以packagetypename 主题属性.
android:disableDependentsState: 与android:dependency相反。B可用,则A不可用;B不可用,则A可用。
android:order:表示偏好顺序,对于偏好较低的值的顺序是先点如果不指定默认的排序将字母必须是一个整数,如100,这也可能是一个参考值在含有这类这相当于全局属性资源符号秩序的形式或
形式packagetypename主题属性的一个资源。
android:shouldDisableView:是否被禁用,这种偏好是必须是布尔值true或false 这也可能是一个参考的形式或主题属性packagetypename资源,packagetypename形式包含一个值 相当于全局属性资源符号shoulddisableview相关方法
android:selectable:偏好是否是可选的。
android:widgetLayout:可以做小部部件部分的布局。
android:fragment:
使用时,可以碎片化PreferenceActivity。
3.显示Preference布局结构的方法为:
使我们的Activity继承PreferenceActivity,然后在onCreate()方法中通过
addPreferencesFromResource(R.xml.custom_preference) (我们自定义的Preference 布局)。
怎么样,是不是似曾相识?稍后会用一个Demo来为您详述。
常用的方法则包括:
getKey() setKey()
getSummary() setSummary()
getText() setText()
getXXX()代表取得xxx属性的值。
4.Preference的跳转:
方法一:在配置每个Preference元素节点时,我们可以显示为点击它时所跳转的Intent。点击该Preference,跳转至目标Intent。除非在onPreferenceTreeClick()方法中进行抉择。在xml中配置如下:
<pre name="code" class="html"></pre><pre name="code" class="java" style="font-size: 14px; color: rgb(34, 34, 34);">1.<Preference android:key="wifi_setting" android:title="Wi-Fi设置" android:summary="设置和管理无线接入点" android:dependency="apply_wifi"> <!-- 点击时 自定义一个默认跳转Intent action指定隐式Intent --> <!-- action指定隐式Intent ; targetPackage和targetClass指定显示Intent--> <intent android:action="com.feixun.action.seemAction" android:targetPackage="com.feixun.qin" android:targetClass="com.feixun.qin.MainActivity" /> </Preference>
8. android:key 唯一标识符。它对应保存的XML保存的配置文件中的节点的 name属性
9. android:defaultValue 默认值,对应XML中的Value属性的值。
方法二:可以在onPreferenceTreeClick()创建新的intent显示的进行跳转。
接下来,对每个Preference的的独有XML Attributes和方法进行一下总结,使大家有更好的深入理解。
1、EditPreference
可输入的设置项
方法:
getEditText() 返回的是我们在该控件中输入的文本框值
getText() 返回的是我们之前sharedPreferen文件保存的值
2、ListPreference
多选对话框设置项
XML Attributes:
android:dialogTitle:弹出控件对话框时显示的标题
android:entries:类型为array,控件欲显示的文本
android:entryValues:类型为array,与文本相对应的key-value键值对,value保存至sharedPreference文件
说明:entries和entryValue属性使用的数组为定义在资源文件arrays.xml的数组名:
方法:
CharSequence[] getEntries(): 返回的是控件显示文本的一个”key”数组,对应于属性android:entries
CharSequence[] getEntryValues():返回的一个”value”数组,对应于属性android: entryValues
CharSequence getEntry(): 返回当前选择文本
String getValue() :返回当前选中文本选中的value 。
其实用法和对选对话框一致 只不过做了保存设置。
采用的数组为:
entries:列表中显示的值。为一个数组,通读通过资源文件进行设置。
entryValues:列表中实际保存的值,也entries对应。为一个数组,通读通过资源文件进行设置。以下代码显示的是arrays.xml文件中内容:
<resources> <string-array name="department"> <item>春节</item> <item>元旦</item> <item>元宵</item> </string-array> <string-array name="department_value"> <item>001</item> <item>002</item> <item>003</item> </string-array> </resources>
3 CheckBoxPreference
可点击的设置项
4 dialogPreference
弹出一个对话框 用户选择确定和取消
重点:分析Preference事件
以下摘自网络:
------------------------------------------------------------------------------------
★在PreferenceActivity方法中,一个比较重要的监听点击事件方法为:
public booleanonPreferenceTreeClick (PreferenceScreen preferenceScreen, Preference preference)
说 明 : 当Preference控件被点击时,触发该方法。
参数说明: preference 点击的对象。
返回值: true 代表点击事件已成功捕捉,无须执行默认动作或者返回上层调用链。 例如,不跳转至默认Intent。
false 代表执行默认动作并且返回上层调用链。例如,跳转至默认Intent。
在我们继承PreferenceActivity的Activity可以重写该方法,来完成我们对Preference事件的捕捉。
相信通过前面的介绍,你一定知道了如何使用了Preference家族并且对其触发方法。下面我们抛出另外两枚炸弹——
Preference相关的两个重要监听接口。
★ Preference.OnPreferenceChangeListener 该监听器的一个重要方法如下:
boolean onPreferenceChange(Preference preference,Object objValue)
说明: 当Preference的元素值发送改变时,触发该事件。
返回值:true 代表将新值写入sharedPreference文件中。
false 则不将新值写入sharedPreference文件
★ Preference.OnPreferenceClickListener 该监听器的一个重要方法如下:
public booleanonPreferenceClick(Preference preference)
说明:当点击控件时触发发生,可以做相应操作。
那么当一个Preference控件实现这两个接口时,当被点击或者值发生改变时,触发方法是如何执行的呢?事实上,
它的触发规则如下:
1 先调用onPreferenceClick()方法,如果该方法返回true,则不再调用onPreferenceTreeClick方法 ;
如果onPreferenceClick方法返回false,则继续调用onPreferenceTreeClick方法。
2 onPreferenceChange的方法独立与其他两种方法的运行。也就是说,它总是会运行。
补充:点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值,然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick
方法中我们得到的控件值就是最新的Preference控件值。
那么,开始我们的实战之旅吧! 下面给您最火热的战场。
1,新建我们的preference.xml文件。
① 在res文件夹下,新建xml文件夹。
② 在新建的xml文件夹下,新建Android XML File。命名为mypeference.xml 。类型选择为Preference。
③ 打开我们的mypeference.xml,视图选择Structure。可以手动配置我们的布局文件。可选的Preference空间如下:
导出的xml文件:yourpageName"_prefenrences.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="Apply_wireless" value="false" /> <boolean name="apply_fly" value="true" /> <boolean name="apply_bluetooth" value="true" /> <string name="number_edit2">123@baidu.com</string> <boolean name="apply_wifi" value="true" /> <boolean name="apply_gps" value="true" /> <string name="number_edit">android.widget.EditText@41a45c00</string> </map>
------------------------------------------------------------------------------------------------------------------------------
二、PreferenceFragment
PreferenceFragment可以在一屏幕放上多个SharedPreferences片段。实现多屏结构显示 ,
用于显示层次结构的偏好对象列表 这些列表的选项将自动保存到SharedPreferences作为与用户交互以检索实例,在该片段SharedPreferences偏好的层次结构用默认的 sharedpreferences去拿值。
此外所示的偏好将遵循系统偏好视觉风格很容易创建一个层次结构鲜明的偏好,可以显示在多个屏幕上通过XML配置,由于这些原因,建议使用此片段作为一个父类的处理SharedPreferences。
PreferenceFragment偏好层次可以以多种方式形成。
@ 从XML文件中指定的层次结构
@ 从不同的活动,可以指定自己的喜好 通过 XML文件的Activity meta-data中。
@从一个对象层次结构植根于preferencescreen.
代码示例:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="显示一排偏好"> <CheckBoxPreference android:key="checkbox_preference" android:title="开关" android:summary="@string/summary_checkbox_preference" /> </PreferenceCategory> <PreferenceCategory android:title="这是对画框偏好"> <EditTextPreference android:key="edittext_preference" android:title="@string/title_edittext_preference" android:summary="@string/summary_edittext_preference" android:dialogTitle="@string/dialog_title_edittext_preference" /> <ListPreference android:key="list_preference" android:title="@string/title_list_preference" android:summary="@string/summary_list_preference" android:entries="@array/entries_list_preference" android:entryValues="@array/entryvalues_list_preference" android:dialogTitle="@string/dialog_title_list_preference" /> </PreferenceCategory> <PreferenceCategory android:title="@string/launch_preferences"> <!--这个标签作为一个屏幕preferencescreen打破类似于分页符在字处理像其他偏好类型我们分配一个关键在这里能够很好的保存和恢复它的实例的状态. 就是所谓的同属一个一样的类别<pre name="code" class="java" style="color: rgb(34, 34, 34); font-size: 14px; line-height: 19px;"><span style="font-family: Roboto, sans-serif;">--></span>
<PreferenceScreen android:key="screen_preference" android:title="@string/title_screen_preference" android:summary="@string/summary_screen_preference"> <!-- 你可以定义更多的Preference,将在下一个屏幕上显示. 点击的时候这个类别会充满屏幕 --> <CheckBoxPreference android:key="next_screen_checkbox_preference" android:title="@string/title_next_screen_toggle_preference" android:summary="@string/summary_next_screen_toggle_preference" /> </PreferenceScreen> <PreferenceScreen android:title="@string/title_intent_preference" android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW" android:data="http://www.android.com" /> </PreferenceScreen> </PreferenceCategory> <PreferenceCategory android:title="@string/preference_attributes"> <!-- 可以定义一个子sp 包括自己视觉风格和主题的 以下俩个子选项属于同一个类别--> <CheckBoxPreference android:key="parent_checkbox_preference" android:title="@string/title_parent_preference" android:summary="@string/summary_parent_preference" /> <CheckBoxPreference android:key="child_checkbox_preference" android:dependency="parent_checkbox_preference" android:layout="?android:attr/preferenceLayoutChild" android:title="@string/title_child_preference" android:summary="@string/summary_child_preference" /> </PreferenceCategory></PreferenceScreen>
具体显示如图所示:
java 代码可以这样写;
public static class PrefsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 加载布局 addPreferencesFromResource(R.xml.preferences); } }
包含如下几个方法:
1 要指定添加一个意图可以使用:
addPreferencesFromResource (int preferencesResId)
2 每个意图可以指定清单中的元数据通过Key来获取子Preference
PreferenceScreen getPreferenceScreen ()
setPreferenceScreen (PreferenceScreen preferenceScreen)
其他生命会周期和activty的一模一样不做细说
3 PreferenceGroup
一种Preference的父类,如preferencecategory, preferencescreen 做基类容器。构造方法有以下三种,具体请看viewgroup的源代码 举一反三,这里不做细说
public PreferenceGroup (Context context, AttributeSet attrs,
int defStyleAttr, int defStyleRes)
public PreferenceGroup (Context context, AttributeSet attrs)
4 RingtonePreference
android:ringtoneType:响铃的铃声类型,主要有:ringtone(音乐)、notification(通知)、alarm(闹铃)(以后楼主为详细介绍alarm类)
、all(所有可用声 音类型)。
android:showDefault :默认铃声,可以使用系统(布尔值---true,false)的或者自定义的铃声
android:showSilent :指定铃声是否为静音。指定铃声包括系统默认铃声或者自定义的铃声
5 SwitchPreference
6 TwoStatePreference
Android Preference详解的更多相关文章
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Android ActionBar详解
Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar 目录(?)[+] 第4 ...
- Android 签名详解
Android 签名详解 AndroidOPhoneAnt设计模式Eclipse 在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...
- Android编译系统详解(一)
++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...
- Android布局详解之一:FrameLayout
原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...
- 【整理修订】Android.mk详解
Android.mk详解 1. Android.mk 的应用范围 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 一个Android.mk文件可以编 ...
- Android菜单详解(四)——使用上下文菜单ContextMenu
之前在<Android菜单详解(二)——创建并响应选项菜单>和<Android菜单详解(三)——SubMenu和IconMenu>中详细讲解了选项菜单,子菜单和图标菜单.今天接 ...
- Android签名详解(debug和release)
Android签名详解(debug和release) 1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包 ...
随机推荐
- 剑指offer面试题3 二维数组中的查找 (java)
注:java主要可以利用字符串的length方法求出长度解决这个问题带来方便 public class FindNum { public static void main(String[] args) ...
- 百度地图SDK3.4的使用
使用过百度地图的开发者应该都知道原始百度地图的开发的基本流程,但是随着百度地图的更新,百度地图的api有了翻天覆地的变化,最新版本的sdk为v3.4 2015年4月14日上线,优化了许多接口的设计,简 ...
- Android项目开发填坑记-so文件引发的攻坚战
故事的最初 我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so ...
- Cocos2D实现RPG游戏人物地图行走的跟随效果
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在一些RPG游戏中,人物队列在地图中行走的时候有时需要实现一个 ...
- 2.QT中使用资源文件,程序打包
1 程序中使用资源文件 A 一个QT空项目 B 右击项目,添加新文件 添加后的效果是 C 右击main.prc,选择"添加现有项",找到要使用的资源文件.最终的效果是: ...
- 初探linux子系统集之timer子系统(一)
一般来说要让整个linux系统跑起来,那么一个必须的就是linux的时钟,也就是时间子系统了,这里正好工作需要,那么就研究下linux下的时间子系统了. linux内核必须完成两种主要的定时测量.一个 ...
- 关于USB驱动的软件测试方法
在工作中难免会使用一些外部设备挂载到平台进行测试,比如U盘,那么判断一个U盘是否能正常读写的方法如下: 1.在U盘中放入一个二进制文件(xxx.bin) 2.通过U盘在软件上读取该二进制文件,并计算其 ...
- Git Bash+EGit在项目中配合使用最常用方法总结(根据场景使用)
最近在项目中使用Git进行代码管理,之前一直用SVN进行管理,现在谈一谈Git在项目中如何与EGit插件配合使用,高效同步开发. 使用过SVN一段时间的人,初识Git一定感觉很别扭,发现会遇到各种各样 ...
- UNIX环境高级编程——线程私有数据
线程私有数据(Thread-specific data,TSD):存储和查询与某个线程相关数据的一种机制. 在进程内的所有线程都共享相同的地址空间,即意味着任何声明为静态或外部变量,或在进程堆声明的变 ...
- Weblogic10 集群配置
1.预备知识 什么是Domain和Server Domain Domain是WebLogic Server实例的基本管理单元.所谓Domain就是,由配置为Administrator Serve ...