热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓Preference详解

Preference用来管理应用程序的偏好设置和保证使用这些的每个应用程序的所有参数拥有同样的方式和用户体验 并且系统和其他应用程序的UI保持偏一致。一个应用程序的偏好部分应作

Preference 用来管理应用程序的偏好设置和保证使用这些的每个应用程序的所有参数 拥有同样的方式和用户体验   并且系统和其他应用程序的UI保持偏一致。

一个应用程序的偏好部分应作为一个独立的活动扩展preferenceactivity类 类中的对象应该是preferencescreen ,preferencescreen包含偏好等元素的布局的根元素 比如checkboxpreference EditTextPreferenceListPreferencePreferenceCategoryRingtonePreference.

对于一个给定的偏好设置将自动保存到SharedPreferences , 拿到SharedPreferences应用实例的很简单getsharedpreferences();值的注意的是保存首选项只能由创建的应用程序去操作。

一般设置对应的UI如图


技术分享



android 3.0以下版本,必须使用PreferenceActivity类来构建。  高于或等于android 3.0版本 使用PreferenceFragment。当然设备屏幕如果足够大的话还是可以使用PreferenceActivity创建双面板布局来显示多组设置


安卓给我们提供了一下接口:

Preference.OnPreferenceChangeListener

接口定义一个回调时调用的值Preference由用户改变了,是吗 关于设置和/或持久化。

Preference.OnPreferenceClickListener

接口定义一个回调时被调用Preference是 点击。

PreferenceManager.OnActivityDestroyListener

接口定义一个类时,将调用容器的活动 被摧毁。

PreferenceManager.OnActivityResultListener

接口定义一个类时,将调用容器的活动 接收到一个活动的结果。

PreferenceManager.OnActivityStopListener

接口定义一个类时,将调用容器的活动 是停止了。

也定义了如下api:

CheckBoxPreference

一个Preference提供checkbox小部件 功能。

DialogPreference

一个基类Preference对象 基于对话框的。

EditTextPreference

一个Preference允许字符串 输入。

ListPreference

一个Preference显示条目的列表 一个对话框。

Preference

代表的基本UI构建的偏好 块显示的PreferenceActivity的形式ListView。

Preference.BaseSavedState

一个基类来管理实例的状态Preference。

preferenceactivity

显示了一个层次Preference对象作为 列表,可能跨越多个屏幕。

PreferenceCategory

用于集团Preference对象 并提供一个残疾人标题上面。

PreferenceGroup

一个容器为多个Preference对象。

PreferenceManager

用于帮助创建Preference层次结构 从活动或XML。

PreferenceScreen

代表一个顶级Preference那 是优先的层次结构的根。

RingtonePreference

一个Preference允许用户选择从这些设备上的铃声。


Preference 可实现的接口

 interfacePreference.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中配置如下:

1.  
3.      
4.      
5.      
7.  


8. android:key 唯一标识符。它对应保存的XML保存的配置文件中的节点的 name属性

9. android:defaultValue 默认值,对应XML中的Value属性的值。

10. 

     方法二:可以在onPreferenceTreeClick()创建新的intent显示的进行跳转。

 

  接下来,对每个Preference的的独有XML Attributes和方法进行一下总结,使大家有更好的深入理解。

       1EditPreference 

        可输入的设置项

            方法:

               getEditText()  返回的是我们在该控件中输入的文本框值

               getText()     返回的是我们之前sharedPreferen文件保存的值

            

                     

        2ListPreference

         多选对话框设置项

          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文件中内容:



春节
元旦
元宵


001
002
003


   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






123@baidu.com


android.widget.EditText@41a45c00

------------------------------------------------------------------------------------------------------------------------------

 

二、PreferenceFragment

PreferenceFragment可以在一屏幕放上多个SharedPreferences片段。实现多屏结构显示 ,pad用的居多 效果如下。

技术分享


 用于显示层次结构的偏好对象列表   这些列表的选项将自动保存到SharedPreferences作为与用户交互以检索实例,在该片段SharedPreferences偏好的层次结构用默认的 sharedpreferences去拿值。

此外所示的偏好将遵循系统偏好视觉风格很容易创建一个层次结构鲜明的偏好,可以显示在多个屏幕上通过XML配置,由于这些原因,建议使用此片段作为一个父类的处理SharedPreferences。

PreferenceFragment偏好层次可以以多种方式形成。

@  从XML文件中指定的层次结构

@ 从不同的活动,可以指定自己的喜好 通过 XML文件的Activity meta-data中。

@从一个对象层次结构植根于preferencescreen.

使用addpreferences 加入要展现的xml, xml可以给根元素添加一个子元素,显示一个充满屏幕的preferencescreen ,其xml可以这样写。


代码示例:



    

        

    

    

        

        

    

    

        

    



具体显示如图所示:

技术分享


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    ,

Preference findPreference (CharSequence key)


3 获取根preferencescreen:

PreferenceScreen getPreferenceScreen ()

4 设置一个满屏的Preference

setPreferenceScreen (PreferenceScreen preferenceScreen)

其他生命会周期和activty的一模一样不做细说


3 PreferenceGroup
   

一种Preference的父类,如preferencecategory, preferencescreen 做基类容器。构造方法有以下三种,具体请看viewgroup的源代码 举一反三,这里不做细说

public PreferenceGroup (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

Added in API level 21

public PreferenceGroup (Context context, AttributeSet attrs, int defStyleAttr)

Added in API level 1

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


有两个可选状态偏好共同基类 和SharedPreferences布尔值和可能相关的偏好,enabled 和disabled基于当前选中的状态来

通过这边文章大家可以大概了解了Preference,以后自己的应用程序的设置页面可以采用安卓自带的Preference,不仅做到和系统一样ui体验,也能方便同一管理,并且保证参数形式一致。装载请标明出处:http://blog.csdn.net/sk719887916



安卓Preference详解


推荐阅读
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
author-avatar
HS_G_960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有