Preference,PreferenceCategory,PreferenceList,PreferenceCheckBox等控件的简单讲解

article/2025/11/5 2:28:41

有人会纳闷,为什么不使用普通的控件去写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控件相似特征
preferencetextView可以保存一些文本数据
CheckBoxPreferenceCheckBox多选
EditTextPreferenceEditText编辑文本
ListPreferenceListView单选,也类似多个RadioButon
PreferenceCategoryLinearLayou、RelativeLayout可以对不同的preference控件进行分类
SwitchPreferenceRadioButton,CheckBox有开和关的选择,常用
RingtonePreference铃声自动加载系统的铃声,并可供选择
PreferenceScreen所有Preference元素的根节点

看一下效果图:

Preference和CategoryPreference效果图
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
可能近期没时间更新博客可了,等这阵子忙完,大概两三个星期吧,再把博客补回来


http://chatgpt.dhexx.cn/article/lQ98asWT.shtml

相关文章

Android中preference标签的使用

现在做公司任务的时候&#xff0c;经常会要去读Settings的源码&#xff0c;然后发现在xml文件中几乎全是用的preferenceScreen和preferenceCategory标签&#xff0c;很少有用布局和控件的&#xff0c;然后我就自己上网看了很多有关的资料&#xff0c;在此总结下。 首先在res目录…

Android 之Preference控件

简述 Preference是Android的控件之一&#xff0c;相对来说我们用的比较少&#xff0c;但在系统应用的Settings设置应用模块中大部分由Preference控件组成。 主要成分 Preference主要角色是子控件&#xff0c;PreferenceCategory相当于LinearLayout和Relative layout&#xff0c…

使用jxls导出报错:Connot load XLS transformer please make sure a Transformer implementation is in classpath

使用jxls导出是报错&#xff1a; java.lang.IllegalStateException: Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath 仔细排查&#xff0c;是因为批注的问题&#xff1a; 是因为批注放到第二个单元格去了&#xff0c;扫描不到区…

XLSTransformer生成excel文件案例

项目结构图&#xff1a; 项目中所用到的jar&#xff0c;可以到http://www.findjar.com/index.x下载 ExcelUtil类源码&#xff1a; package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.u…

XLSTransformer 导出Excel数据

先上代码 java code: <pre name"code" class"java">package cn.export.util; import java.io.FileInputStream; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.Serv…

Java XLSTransformer生成excel文件

把页面的数据导出excel 数据 然后进入 struts2 action <action name"generateExcel" class"com.xx.emidas.activity.activity.ajax.XLSTransformerGenerateExcelAction"></action> package com.xx.emidas.activity.activity.ajax;import co…

XLSTransformer生成excel文件简单示例

项目结构图&#xff1a; 项目中所用到的jar&#xff0c;可以到http://www.findjar.com/index.x下载 ExcelUtil类源码&#xff1a; [java] view plain copy package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.uti…

XLSTransformer生成excel文件简单演示样例

项目结构图&#xff1a; 项目中所用到的jar&#xff0c;能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码&#xff1a; package util;import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map;i…

XLSTransformer+模板 导出 Excel

利用excel模板来导出excel文件&#xff0c; 十分方便 RequestMapping(value "/download/vin", method RequestMethod.GET)ResponseBodypublic ResBody exportExcel(HttpServletRequest request) {String path request.getSession().getServletContext().getRealPa…

XLSTransformer.transformWorkbook导出excel不能将列导出完整问题

生产就项目用到jxls加poi导出excel文件 //模拟数据 List data new ArrayList<>(); Map<String,Object> excelMap new HashMap<>();excelMap.put("ro", data ); //项目用到的导出代码 String fileName SystemConst.WEB_ROOT_PATH File.separat…

Jxls异常 Cannot load XLS transformer. Please make sure a Transformer impleme

错误&#xff1a;Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath 原因&#xff1a; 这是 jxls 的版本升级2.4后需要额外导入其他依赖 还要在plugins中加上以下插件 <plugin><groupId>org.apache.maven.plugins</…

Excel之XLSTransformer

前言 利用该工具类可以向excel模板中写入数据&#xff0c;而不用写过多代码画excel 引入依赖 java <dependency> <groupId>net.sf.jxls</groupId> <artifactId>jxls-core</artifactId> <version>1.0.3</version> </dependency>…

使用XLSTransformer生成报表的步骤和流程

使用XLSTransformer生成XLS报表的步骤和流程&#xff1a; 需要引入的jar包&#xff1a; jxls-core-0.9.7.jar jxls-reader-0.9.7.jar poi-3.6.jar commons-jexl-1.1.jar commons-digester-2.0.jar commons-beanutil-core-1.8.3.jar commons-collection.jar 示例代码…

利用模板导出文件(一)之XLSTransformer导出excel文件

由于现在好多公司都在实行办公无纸化操作&#xff0c;所以一般都是使用excel以及word来办公&#xff0c;本文是公司项目中使用excel文件模板生成对应的文件&#xff1a; 首先&#xff0c;需要导入一下几个包&#xff1a; 接下来就是具体的代码&#xff1a; import java.io.Fil…

关于使用XLSTransformer.transformXLS导出Excel表格中遇到的问题

1. 需求&#xff1a;最近拿到的一个任务&#xff0c;是将订单列表导出&#xff0c;按照订单列表导出&#xff08;包括筛选条件&#xff09;。 背景&#xff1a;由于原本的订单列表查询代码太过繁重&#xff0c;里面夹杂的逻辑较多&#xff0c;再有一个是自己想尽快的熟悉公司…

最简单方便的excel导出方式

前言&#xff1a;开发各种统计系统以及报表系统之类的不可避免的就是导出excel功能&#xff0c;传统的poi用过的都知道&#xff0c;每个sheet每个row都需要去定义去美化&#xff0c;繁琐不说还很浪费时间&#xff0c;最近本人发现两种较快速的方法&#xff0c;一种是excel模版方…

Handler、Looper、HandleThread、ActivityThread简介

1. Handler 源码位于&#xff1a; platform/frameworks/base/core/java/android/os/Handler.java Handler允许发送和处理与线程的MessageQueue关联的Message和Runnable对象。每个Handler实例都与单个线程和该线程的消息队列相关联。 当创建一个新的Handler时&#xff0c;它会被…

Android—ActivityThread与Handler

应用启动过程&#xff1a; ActivityThread ActivityThread就是主线程或UI线程&#xff0c;ActivityThread的main方法是整个APP的入口。 public final class ActivityThread {//... final H mH new H();final ArrayMap<IBinder, ActivityClientRecord> mActivities n…

ActivityThread运行框架

http://www.embeddedlinux.org.cn/Androidkernel/77.htm 在分析中&#xff0c;我们可以看到真正对应应用进程的不是Application而是ActivityThread。我们从实际的应用堆栈可以看到&#xff1a; NaiveStart.main() ZygoteInit.main ZygoteInit$MethodAndArgsCall.run Method.In…

ActivityThread应用进程

ActivityThread应用进程 android12-release Zygote进程SystemServer进程(即system_server)Launcher启动过程、AMS:startActivity桌面启动应用 缺少具体应用进程启动 1. 涉及进程 Zygote进程&#xff1a;init进程 fork 第一个Java进程&#xff0c;Zygote是所有Java进程的父进…