有人会纳闷,为什么不使用普通的控件去写settings页面,非得要preference来写,这是有原因的,Preference可以自动保存上一次操作的值,并且preference会自动将自己的值保存在shared Preference里面,而preference的key作为在shared Preference的主键,用来检索preference保存的值,这就是preference的特点,settings页面需要对当前操作进行保存,普通控件的保存繁琐,所以使用preference是明智之举。Android里面有一个PreferenceActivity,但是创建PreferenceActivity会附带很多xml文件等,反而增加了编程的学习时间和成本,所以不建议使用,比较折中的方法是使用普通的Activity+preference的xml文件来使用,我在上一篇博文中也提到这个,这里只对Activity+Preference的方法做举例。


如何创建和使用Preference页面,我在上一篇博文里有详细提及,这里就不详细说明了,想要了解的小伙伴可以都这里查看:Settings设置页面的Preference使用方法

PreferenceScreen的资源文件里,有以下几种控件,都相对应着不同的普通控件:如下

preference控件 相似 特征
preference textView 可以保存一些文本数据
CheckBoxPreference CheckBox 多选
EditTextPreference EditText 编辑文本
ListPreference ListView 单选,也类似多个RadioButon
PreferenceCategory LinearLayou、RelativeLayout 可以对不同的preference控件进行分类
SwitchPreference RadioButton,CheckBox 有开和关的选择,常用
RingtonePreference 铃声 自动加载系统的铃声,并可供选择
PreferenceScreen 所有Preference元素的根节点

看一下效果图:

Preference和CategoryPreference效果图

SwitchPreference效果图

CheckBoxPreference效果图

RingtonePreference 效果图(无聊加了张小图片,提示你这个也能加图片)

点击RingtonePreference 以后跳转到以下界面,这个不用自己写,只要使用了RingtonePreference 控件,单击就会有这种效果

样式代码:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategory
        android:key="categoryOne"android:title="General"><Preference
            android:key="prefAndroid"android:title="安卓"android:summary="点一下更新内容"/><Preference
            android:key="prefIos"android:title="IOS"android:summary="可以作为一个设置项"/><CheckBoxPreference
            android:key="prefCheckBoxOne"android:title="这相当于一个CheckBox"/><CheckBoxPreference
            android:key="prefCheckBoxTwo"android:title="还可以设置summary"android:summaryOn="选中了"android:summaryOff="没选中"/><EditTextPreference
            android:key="prefEditText"android:title="这相当于一个EditText"android:summary="我是EditText的一个summary"/><ListPreference
            android:key="prefList"android:title="这相当于一个List表"/></PreferenceCategory><PreferenceCategory
        android:key="prefCategoryTwo"android:title="Inactive" ><MultiSelectListPreference
            android:key="prefMultiSelect"android:title="这相当于一个MultiSelect"/><SwitchPreference
            android:key="prefSwitch"android:title="这相当于一个Switch"android:switchTextOn="switchTextOn选中了"android:switchTextOff="switchTextOff没选中"android:summaryOn="summaryOn选中了"android:summaryOff="summaryOff没选中"android:shadowColor="#0df10d"/><RingtonePreference
            android:key="prefRingtone"android:title="这相当于一个"android:summary="请选择铃声"android:icon="@mipmap/ic_launcher_round"/></PreferenceCategory>
</PreferenceScreen>

具体如何写样式资源文件,在上一篇博文上写过:想了解的伙伴可以点击这个:Settings设置页面的Preference使用方法。


下面详细地介绍一下这些空间怎么用。

1. Preference的使用
preference相当于普通的文本控件,能够记录基本的文本。
点击事件如下:

@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {if(preference==prefAndroid){Toast.makeText(mContext,"点击了第一个Preference",Toast.LENGTH_SHORT).show();}else if(preference==prefIos){Toast.makeText(mContext,"点击了第二个Preference",Toast.LENGTH_SHORT).show();}else if(preference==prefCheckBoxOne){Toast.makeText(mContext,"点击了第一个CheckBoxPreference",Toast.LENGTH_SHORT).show();}else if(preference==prefCheckBoxTwo){Toast.makeText(mContext,"点击了第二个CheckBoxPreference",Toast.LENGTH_SHORT).show();}else if(preference==prefEditText){Toast.makeText(mContext,"点击了EditTextPreference",Toast.LENGTH_SHORT).show();}else if(preference==prefList){Toast.makeText(mContext,"点击了ListPreference",Toast.LENGTH_SHORT).show();}else if(preference==prefMultiSelect){Toast.makeText(mContext,"点击了MultiSelectListPreference",Toast.LENGTH_SHORT).show();}else if(preference==prefRingtone){Toast.makeText(mContext,"点击了SwitchPreference",Toast.LENGTH_SHORT).show();}else if(preference==prefRingtone){Toast.makeText(mContext,"点击了RingtonePreference",Toast.LENGTH_SHORT).show();}return super.onPreferenceTreeClick(preferenceScreen, preference);}

在setting的preference页面里,使用这个重写函数可以对点击事件进行响应。preference控件更多地是被用作跳转到下一个preference页面的承载。,这里不多说!

2. CheckBoxPreference的使用
CheckBoxPreference控件相当于一个CheckBox控件,通过点击来实现单击和选中。
if(preference.isSelectable()){
preference.setTitle("我要选中它!");
preference.setSummary("点击了选中!");
}else {
preference.setTitle("我不想选中它!");
preference.setSummary("取消了选中!");
}

3. EditTextPreference 的使用
EditTextPreference点击后出现一个dialog对话框,可以添加编辑文本,文本添加以后会保存在sharepreference里,下次编辑时默认显示上次添加的内容。添加文本以后控件不会显示该文本,可以将文本赋值给EditTextPreference的summary属性,让它直接显示在界面上。

但是有一点,如上图,dialog的标题就是这个控件的summary值,这一点需要注意。

4. 其他控件的使用这里就不多说了,最近比较忙,以至于近期都没有按时写博客。突然发现自己在大一大二落下了许多知识,现在想要补回来,奈何时间太少。寒假需要学一学算法,这里立一个flags
可能近期没时间更新博客可了,等这阵子忙完,大概两三个星期吧,再把博客补回来

Preference,PreferenceCategory,PreferenceList,PreferenceCheckBox等控件的简单讲解相关推荐

  1. android 日程安排view,RecyclerView 列表控件中简单实现时间线

    时间 时间,时间,时间啊:走慢一点吧- 看见很多软件中都有时间线的东西,貌似天气啊,旅游啊什么的最多了:具体实现方式很多,在本篇文章中讲解一种自定义View封装的方式. 效果 先来看看效果. 分析 软 ...

  2. Android 控件 RecyclerView简单使用

    Android 控件 RecyclerView简单使用 1.导依赖库 implementation 'com.android.support:recyclerview-v7:27.1.1'implem ...

  3. FullCalendarDemo5 控件的实例讲解—拖拽实现值班排班(五)

    FullCalendarDemo5 控件的实例讲解-拖拽实现值班排班(五) (五)c# asp.net 操作FullCalendarDemo5 导出排班记录 目的:点击导出按钮,弹出参数指定对话框,选 ...

  4. aardio工具提示控件的简单实例

    这是早时候回答群友问题时写的一个tooltip控件的简单实例.江边的老马在博文老马的小站中贴了部分代码,不太完整,我这里贴个完整一点的,可以直接运行.主要就是提示框随着鼠标移动,另外也有列表视图控件的 ...

  5. Android动态加载XML文件及控件来简单实现QQ好友印象的功能

    在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态 ...

  6. 带复选框和简单描述的Qt QTreeWidget树形控件的简单使用

    Qt QTreeWidget树形控件的简单使用 具有选择框的树形控件 具有选择框的树形控件 效果:当选中顶层的树形节点时,子节点全部被选中:当取消选中顶层树形节点时,子节点全部被取消:当选中子节点时, ...

  7. asp.net中HTML控件和web控件的简单理解

    前言 在学习视频的时候,讲解者一会儿使用HTML控件,一会儿使用web控件,有一种很迷糊的感觉,他俩到底有什么区别呢,作为一个初学者,有必要分析一下. 概念 HTML控件是客户端控件,响应客户端事件, ...

  8. 【按住你的心】——Android开发CheckBoxRadioButton控件的简单使用

    Android的控件很多,我们从最常用的一些控件学起,今天我们学习CheckBox和RadioButton. 首先,我们要在main.xml文件中添加控件: <?xml version=&quo ...

  9. 【jquery模仿net控件】简单的datalist控件更新,及其简单应用

    接上次的帖子:http://www.cnblogs.com/yexiaochai/archive/2012/01/22/2328729.html 简单的更新了一下代码,主要针对datalist,这次主 ...

最新文章

  1. 笔记-高项案例题-2009年上-需求管理
  2. 微信 weui 初体验
  3. 一入爬虫深似海,反爬技术你知多少?
  4. ASP.NET Core Web Api之JWT(一)
  5. URLEncoder 、URLDecoder 对中文转码解码使用
  6. Getting Started with the Table Component
  7. 第5篇:Flowable快速工作流脚手架Jsite_请假实战_部署流程和发起流程
  8. Hidden Markov Model
  9. leetcode-461-Hamming Distance
  10. Linux TUN/TAP 虚拟网卡编程入门https://backreference.org/2010/03/26/tuntap-interface-tutorial/...
  11. SQL Server-【知识与实战IV】多表查询、个数计算、多重约束条件、两表间的交集、多表之间的关系分析
  12. JS判断字符串包含的方法
  13. 一个基于 SpringBoot+Redis+Vue 仿饿了么外卖系统(后台+移动端),可二次开发接私活!...
  14. Sublime Text 2安装图解
  15. TDA4VM芯片手册阅读笔记
  16. freenom域名申请教程
  17. 105套抖音快闪模板
  18. U盘量产,以及U盘“请将磁盘插入u盘”等问题。
  19. ecno是什么的缩写_nbcs是什么意思的缩写?
  20. 2021-07-07 Day01 前端基础第一天

热门文章

  1. with open()的使用方法
  2. 亚马逊发布AI跟踪系统,监督员工能否保持社交距离
  3. Ubuntu 20.04 中使用命令重启网卡(仅记录)
  4. 架构师必备:HBase行键设计与应用
  5. python实现Theil-Sen Median斜率估计和Mann-Kendall趋势分析
  6. 如何用 Python开发一个简单的 Webkit 浏览器
  7. VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了
  8. 手把手教你安装VSCode(附带图解步骤)
  9. 23种设计模式的优缺点
  10. 微软苹果服务器宕机,苹果服务器宕机:微软特斯拉也中招,不要轻易刷机