在Android系统源码中,绝大多数应用程序的UI布局都有可能采用了Preference的布局结构,如Setting模块。Preference布局结构和View的布局结构相似,Preference的优点在于布局界面的可控性和高效率以及可存储值的简洁性(每个PreferenPreferencece存储在相对应下的SharedPreference文件夹下)。

1) 对比Preference和View下得各个子控件的区别与联系如下表。

Preference控件家庭 View控件家庭     控件的含义
Preference TextView 文本框
EditTextPreference EditText 编辑框
ListPreference Listview 列表框
CheckPreference/SwitchPreference CheckBox 单选框
DialogPreference AlertDialog 对话框
RingtonePreference     __________ 铃声

2) Preference中常见的组合控件:
         (1) PreferenceCategory :类似于LinearLayout、RelativeLayout,用于组合一组Preference,使布局更具备层次感 。
         (2)PreferenceScreen  : 所有Preference元素的根节点。
 3)显示Preference布局结构
       首先让Activity继承PreferenceActivity,在onCreate()方法中通 过addPreferencesFromResource(R.xml.custom_preference) (我们自定义的Preference 布局)。

4) Preference元素的通用XML Attributes说明:

android:key 每个Preference控件独一无二的”ID”,唯一表示此Preference
android:title 整个屏幕的标题
android:summary 选项的简单说明
android:defaultValue 对应值不存在时的默认值,常用于checkpreference控件中
android:enabled 表示该Preference是否可用状态
android:entries 弹出的对话框中,列表显示的文本内容,注意哦,这里指定的是一个数组
android:entryValues 与android:entries相对应的值
android:persistent 表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值
android:dependency 表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用, 则A可用;B不可用,则A不可用
android:disableDependentsState 与android:dependency相反。B可用,则A不可用;B不可用,则A可用

5)常用的方法:
              getKey()                 setKey()
             getSummary()          setSummary()
             getText()                 setText()

getXXX()代表取得xxx属性的值。

6)常用的Preference控件所包含的属性和方法说明

1、EditPreference
            方法:
               getEditText():返回的是我们在该控件中输入的文本框值;
               getText() :返回的是我们之前sharedPreference文件保存的值;          
        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 。与之对应的还有它们所对应的setXXX()方法。
    
      3、RingtonePreference

XML Attributes:

android:ringtoneType 响铃的铃声类型,主要有:ringtone(音乐)、notification(通知)、alarm(闹铃) /all(所有可用声 音类型);
android:showDefault 默认铃声,可以使用系统(布尔值---true,false)的或者自定义的铃声
android:showSilent 指定铃声是否为静音。指定铃声包括系统默认铃声或者自定义的铃声

4 、DialogPreference

XML Attributes:

android:dialogIcon   对话框的图标
android:dialogLayout   用来承载对话框的布局文件
android:dialogMessage   对话框的消息
android:dialogTitle   对话框的标题
android:negativeButtonText   The negative button text for the dialog. 
android:positiveButtonText   The positive button text for the dialog. 

方法: getDialog()/ getDialogIcon()/ getDialogLayoutResource()/ getDialogMessage()/ getDialogTitle()/ getNegativeButtonText()/ getPositiveButtonText()等方法;

。。。。。。

7)较为重要的几个知识点剖析:

1、 在PreferenceActivity方法中,一个比较重要的监听点击事件方法为:
    public booleanonPreferenceTreeClick (PreferenceScreen preferenceScreen, Preference preference)
              说 明 : 当Preference控件被点击时,触发该方法。
              参数说明: preference   点击的对象。
              返回值:   true  代表点击事件已成功捕捉,不需要执行默认的动作或者返回上层调用;false 代表执行默认的动作并且返回上层调用。
      2、 Preference.OnPreferenceChangeListener     该监听器的一个重要方法如下:
        boolean onPreferenceChange(Preference preference,Object objValue)
             说明:  当Preference的元素值发送改变时,触发该事件。
             返回值: true  代表将新值写入sharedPreference文件中。
                         false 则不将新值写入sharedPreference文件
     3、 Preference.OnPreferenceClickListener      该监听器的一个重要方法如下:
         public booleanonPreferenceClick(Preference preference)
             说明:当点击控件时触发发生,可以做相应操作。

8)实例操作:

1  创建Preference布局文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory
            android:title="Settings">
            
        <CheckBoxPreference
                android:key="checkbox_preference"
                android:title="CheckBox大标题"
                android:summary="CheckBox小标题" />
            
    </PreferenceCategory>
                
    <PreferenceCategory
            android:title="PreferenceCategory_2">
        <EditTextPreference
                android:key="edittext_preference"
                android:title="EditText的大标题"
                android:summary="EditText的小标题"
                android:dialogTitle="这是对话框的大标题" />
                
     <!--    <ListPreference
                android:key="list_preference"
                android:title="ListPreference的大标题"
                android:summary="ListPreference的小标题"
                android:entries="@array/entries_list_preference"
                android:entryValues="@array/entryvalues_list_preference"
                android:dialogTitle="ListPreference对话框Title" /> -->
    </PreferenceCategory>
    <PreferenceCategory
            android:title="点击这个Category将启动新的Preference">
       
        <PreferenceScreen
                android:key="screen_preference"
                android:title="新的PreferenceScreen的Title"
                android:summary="PreferenceScreen的Summary">
            
            <CheckBoxPreference
                    android:key="next_screen_checkbox_preference"
                    android:title="新的CheckBoxPreference的Title"
                    android:summary="新的CheckBoxPreference的Summary" />
                
        </PreferenceScreen>
        <PreferenceScreen
                android:title="intent的Title"
                android:summary="启动Intent的Summary">
            <intent android:action="android.intent.action.VIEW"
                    android:data="http://www.android.com" />
        </PreferenceScreen>
    </PreferenceCategory>
    
    <PreferenceCategory
            android:title="PreferenceCategory属性">
    
        <CheckBoxPreference
                android:key="parent_checkbox_preference"
                android:title="CheckBoxPreference的Title"
                android:summary="Summary,下个Item依赖这个CheckBox的选择" />
        <!-- 在XML中定义CheckBoxPreference属性 -->
        <CheckBoxPreference
                android:key="child_checkbox_preference"
                android:dependency="parent_checkbox_preference"
                android:layout="?android:attr/preferenceLayoutChild"
                android:title="这个Item依赖上个Item的选择"
                android:summary="Summary,这个Item依赖上个Item的选择" />
            
    </PreferenceCategory>
</PreferenceScreen>

2)创建一个Activity

public class PrefActivity extends PreferenceActivity{
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        addPreferencesFromResource(R.xml.prefdemo);
    }
}

3)效果图:

Android基础知识--Preference的使用相关推荐

  1. Android基础知识:在UI线程中运行代码

    本文翻译自:Android basics: running code in the UI thread In the viewpoint of running code in the UI threa ...

  2. 100天精通Andriod逆向——第2天:Android基础知识和jadx的使用

    目录 一.Android基础知识介绍 1.1 Android 历史版本 1.2 apk 包文件结构 1.3 Android系统目录介绍 二.jadx的使用 2.1 jadx 的简介 2.2 jadx ...

  3. Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转

    Android基础知识(二十):Notification.提醒式通知(横幅)踩坑与通知界面设置跳转 一.Notification通知与基本用法 通知Notification是Android系统中比较有 ...

  4. Android基础知识【项目实训-实现二级导航“今日活动”及读取数据库】【5】

    [该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 ...

  5. Android 基础知识+app测试权限问题

    Android 基础知识(权限篇)** 前言 ​ Android是一个开源的,基于Linux的移动设备操作系统,主要用于移动设备,如智能手机和平板电脑.Android是由谷歌及其他公司带领的开放手机联 ...

  6. Android基础知识——完善

    首页 下载App × Android基础知识--完善 布鲁马 2016.05.17 10:29* 字数 5478 阅读 2672评论 1喜欢 38 疯狂Android摘要,Android基础知识好乱好 ...

  7. android基础知识

    技术型男 随笔 - 20, 文章 - 0, 评论 - 4, 引用 - 0 android基础知识 1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速 ...

  8. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

    Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...

  9. Android基础知识~入门进阶,一步步走到高手

    Android基础知识~入门进阶,一步步走到高手 2011年09月01日 [b]希望新入手ANDROID设备的朋友认真阅读本帖,一些简单的问题就可以自己解决了!!! 一:基础知识[/b] [b]1.什 ...

最新文章

  1. 顺序表-顺序表表示集合-并集(A复制到C,B遍历比较C)
  2. Mybatis原理分析之一:从JDBC到Mybatis
  3. MVC核心功能组件和简介
  4. RabbitMQ 死信/死信队列
  5. 21 WM配置-策略-入库策略1-定义固定仓位的策略F(Fixed Bin Strategy)
  6. 蠕虫病毒往往是通过进入计算机系统,2012年甘肃省三职生计算机考试题
  7. 自己编写错误代码的规范
  8. unity 随机数_Unity 雨水滴到屏幕效果
  9. Q130:PBRT-V3,非均匀介质的采样(11.3.3章节、15.2.2章节)
  10. AngularJS API之toJson 对象转为JSON
  11. 计算机预测自己未来的相貌,测测未来另一半的模样 测测你的另一半长相软件...
  12. python具有集成开发环境对吗_对于Python集成开发环境,你更喜欢哪一款?
  13. glibc 知:手册05:字符串和数组
  14. 安卓手机使用Termux软件进行Linux系统的安装
  15. 【android】调用系统app打开word文档遇到的问题
  16. 关于存储器中的地址与数据的对应关系
  17. BetaFlight统一硬件配置文件研读之set命令
  18. Matlab 语言基础知识输入命令之diary
  19. 腾讯为何做不了电商?
  20. px4添加遥控器开关快捷校准磁罗盘

热门文章

  1. observe数据代理
  2. 视频播放器,基于videojs,NVR
  3. 数字信封_用于保存财务记录的简单信封系统
  4. adprw指令通讯案例_【智】S7200PLC与台达变频器MODBUS简单通讯案例详解
  5. Oracle Data Guard(DG)11g12C搭建部署
  6. python小测试8_用 Python 写一个颜值测试小工具
  7. Java构造多边形的各点坐标合理性判断并抛出异常
  8. excel计算班级总分排名_在Excel中计算排名
  9. 案例:使用selenium模拟qq登入
  10. matlab单位采样序列程序,常用序列的MATLAB实现