时间选择器自定义实战:3 个场景搞定年月日时分秒格式的完整指南
时间选择器自定义实战3 个场景搞定年月日时分秒格式的完整指南【免费下载链接】Android-PickerViewThis is a picker view for android , support linkage effect, timepicker and optionspicker.时间选择器、省市区三级联动项目地址: https://gitcode.com/gh_mirrors/an/Android-PickerView你是不是也遇到过这样的需求一个定时提醒功能用户只想选时:分系统自带的 DatePicker 却固执地弹出一整个日历App 主色是薄荷绿选择器却永远是黑白灰后端要求的日期格式是yyyy-MM-dd HH:mm:ss选完还得自己在代码里拼字符串。这些痛点 Android-PickerView 都能解。这是一个仿 iOS 滚轮的 Android 时间选择器与条件选择器组件支持年月日时分秒任意组合、范围限制、自定义标签、自定义布局甚至农历。这篇文章不打算罗列 API而是带着 3 个真实业务场景从零到一把一个能交付的时间选择器做出来。读完你就能直接照抄代码。5 分钟跑通第一个可用版本先把项目 clone 下来把pickerview和wheelview两个 module 引入你的工程仓库地址https://gitcode.com/gh_mirrors/an/Android-PickerView。最朴素的用法只有三步new 一个 builder、传一个回调、build。TimePickerView pvTime new TimePickerBuilder(this, new OnTimeSelectListener() { Override public void onTimeSelect(Date date, View v) { // date 已经是解析好的 Date直接格式化即可 SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); tvTime.setText(sdf.format(date)); } }).build(); // 弹出来 pvTime.show();不配置任何东西它默认显示年月日三个滚轮可选的年份范围是 1900 到 2100。从这一个最小示例开始后面的定制都是在这个链式调用上不断加方法而已。三个常见坑与避坑方案第一次接这个库的人十个里有八个栽在下面三个坑上。用表格对照着看比踩一遍再改高效得多。坑一月份差一个月错误写法正确写法startDate.set(2023, 1, 1)// 你以为是一月startDate.set(2023, 0, 1)// 一月endDate.set(2025, 12, 31)// 十二月endDate.set(2025, 11, 31)// 十二月原因很简单Java 的Calendar月份从 0 开始0 代表一月、11 代表十二月。demo 源码里专门注释了这一点但因为它不报错、只让你选出的范围莫名偏移所以特别隐蔽。规则凡是手写Calendar.set()设置起止时间月份一律减 1。坑二type 数组长度不是 6直接抛异常setType接收一个长度为 6 的布尔数组分别对应年月日时分秒。写少一个或多个WheelTime源码里会直接throw new RuntimeException(type[] length is not 6)。想只显示时分要这样写.setType(new boolean[]{false, false, false, true, true, false})前面三个false把年月日隐藏第 4、5 位显示时分第 6 位隐藏秒。位置不能错这跟后面setLabel的参数顺序是严格对应的。坑三自定义布局报空指针用setLayoutRes换自定义布局时新布局里必须保留 id 为timepicker的容器及其内部的 6 个WheelViewid 分别为year/month/day/hour/min/sec。库是通过 findViewById 去找这些控件的缺一个就 NPE。正确姿势是复制pickerview/src/main/res/layout/pickerview_time.xml只改你想改的部分——比如只替换顶栏保留滚轮区域原样。按真实需求场景进阶定制场景一只选时间不选日期场景会议提醒、吃药闹钟用户只需要几点几分。Calendar startDate Calendar.getInstance(); startDate.set(2014, 1, 23); // 注意这里是 0-11 月1 表示二月 Calendar endDate Calendar.getInstance(); endDate.set(2027, 2, 28); pvTime new TimePickerBuilder(this, new OnTimeSelectListener() { Override public void onTimeSelect(Date date, View v) { SimpleDateFormat sdf new SimpleDateFormat(HH:mm); btnTime.setText(sdf.format(date)); } }) .setType(new boolean[]{false, false, false, true, true, false}) // 只显示时分 .setRangDate(startDate, endDate) .build();setRangDate会顺带做一件事如果当前默认时间落在范围外它会自动把选中项拨到 startDate。所以只选时分的场景下起止日期随便给个宽范围即可滚轮上只会出现时分两列。场景二限制可选范围 默认值回填场景选生日只能选 1950 年到今天编辑已有档案时选择器要默认停在该用户的生日上。Calendar selectedDate Calendar.getInstance(); selectedDate.set(1995, 5, 15); // 回填1995年6月15日 Calendar startDate Calendar.getInstance(); startDate.set(1950, 0, 1); Calendar endDate Calendar.getInstance(); // 今天 pvTime new TimePickerBuilder(this, new OnTimeSelectListener() { /* ... */ }) .setDate(selectedDate) // 默认选中项 .setRangDate(startDate, endDate) // 可选范围 .setType(new boolean[]{true, true, true, false, false, false}) .setLabel(年, 月, 日, 时, 分, 秒) .build();需要注意两点一是setDate的月份同样要减 1二是如果回填的日期落在范围外库会静默改用 startDate 作为选中项所以回填前最好自己判断一次合法性。场景三换皮肤贴合 App 风格场景App 主色是薄荷绿#24AD9D选择器也该长成这样。pvTime new TimePickerBuilder(this, new OnTimeSelectListener() { /* ... */ }) .setContentTextSize(18) // 滚轮文字大小 .setLineSpacingMultiplier(1.2f) // 行距倍数只能在 1.0-4.0 .setDividerColor(0xFF24AD9D) // 分割线颜色 .setTextColorCenter(0xFF2a2a2a) // 选中项文字颜色 .isCenterLabel(false) // false: 每个 item 都带单位标签 .setTitleText(选择提醒时间) .setSubmitText(确定) .setCancelText(取消) .build();顺带一提isCenterLabel(false)是让滚轮上每一行都显示单位true则是只有中间选中行显示单位。前者信息更完整后者更清爽建议按滚轮数量取舍——滚轮多时用后者避免拥挤。场景四连秒也不想要把标签换成你喜欢的文字setLabel的 6 个参数依次对应年月日时分秒的显示文字。默认是年/月/日/时/分/秒但很多电商的预约上门时间场景想要英文缩写或者干脆不要单位.setType(new boolean[]{false, false, false, true, true, true}) .setLabel(, , , :, , ) // 只给小时后面显示冒号配合setTextXOffset微调每列文字的 X 轴偏移能拼出08 : 30 : 00这类紧凑格式。demo 里自定义时间选择器就是这么处理的完整代码在app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java的initCustomTimePicker()方法中。改造前后效果对比用默认配置直接build()出来的选择器功能没问题但谈不上好看蓝按钮、灰分割线、白底和大多数 App 的视觉是脱节的。而经过上面场景三的几行配置选择器立刻和产品主色调统一用户滚动时的焦点落在薄荷绿的分割线之间配合setTitleText让用户明确知道我在设置什么。上图是项目自带效果的动图滚轮依次是年、月、日、时、分、秒六列顶部有取消 / 选择时间 / 确定操作区。注意默认配置只显示年月日三列六列全开需要像前面那样把setType的 6 个位置全部设为true。体验层面的建议滚轮数量越多单位标签越容易挤作一团。6 列全开时建议isCenterLabel(true)并配合setTextXOffset做微调如果只需要日期3 列其实最舒服——这也是为什么PickerOptions源码里默认type就是{true, true, true, false, false, false}。实战要点清单与延伸动手之前把这 6 条过一遍月份一律 0-11写范围前先-1。setType的布尔数组长度必须是 6顺序是年月日时分秒。自定义布局时timepicker容器和 6 个 WheelView 的 id 一个都不能动。回填数据用setDate校验范围用setRangDate两者可叠加。想换样式setDividerColor/setTextColorCenter/setContentTextSize/setLineSpacingMultiplier四件套先调起来。回调里拿到的是Date格式化用你自己的SimpleDateFormat想怎么拼都行。想深入了解某个方法直接读源码比看文档快TimePickerBuilder定义在pickerview/src/main/java/com/bigkoo/pickerview/builder/滚轮的联动和范围逻辑在pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java默认布局在pickerview/src/main/res/layout/pickerview_time.xml。项目还有农历支持setLunarCalendar(true)和自定义布局的完整示例等你想做日历类功能时再翻app/src/main/res/layout/pickerview_custom_lunar.xml也不迟。总结回到开头的三个痛点只选时分、改主题色、格式化输出现在都有了现成的解法。你得到的不仅是能用而是一套可复制的方法论——先明确要哪几列setType再限定范围setRangDate最后调外观颜色/字号/行距任何时间选择需求都能按这个顺序拆解。下一步建议分三步走先把本文的最小示例跑通确认依赖没问题然后照着场景一改一个你业务里的真实表单最后把 demo 源码里MainActivity的各个 init 方法读一遍看看官方是怎么组织这些链式调用的——你会发现它还能做的远比今天讲的多。【免费下载链接】Android-PickerViewThis is a picker view for android , support linkage effect, timepicker and optionspicker.时间选择器、省市区三级联动项目地址: https://gitcode.com/gh_mirrors/an/Android-PickerView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Android-PickerView实战:3个场景快速搞定时间选择器与省市区三级联动

Android-PickerView实战:3个场景快速搞定时间选择器与省市区三级联动

Android-PickerView实战:3个场景快速搞定时间选择器与省市区三级联动 【免费下载链接】Android-PickerView This is a picker view for android , support linkage effect, timepicker and optionspicker.(时间选择器、省市区三级联动) 项目…

2026/9/20 4:42:57 阅读更多 →
Win11家庭版安装Docker完整指南:WSL2解决方案

Win11家庭版安装Docker完整指南:WSL2解决方案

1. 为什么Win11家庭版需要特殊方式安装Docker? 在Windows 11家庭中文版上安装Docker Desktop会遇到一个关键障碍——系统默认不包含Hyper-V管理程序。与专业版和企业版不同,家庭版缺少完整的虚拟化支持功能,这直接导致Docker Desktop安装时出…

2026/9/20 2:26:21 阅读更多 →
头歌实践教学平台:Spark大数据编程(三十六~四十)

头歌实践教学平台:Spark大数据编程(三十六~四十)

三十六、RDD概述 任务描述 本关任务:根据下面的相关知识,完成与数据认知相关的选择题。 相关知识 RDD介绍 RDD 是Spark的核心抽象,即 弹性分布式数据集(residenta distributed dataset)。代表一个不可变,…

2026/9/20 0:53:05 阅读更多 →

最新新闻

FPGA动态部分重配置(DFX)原理与工程实践指南

FPGA动态部分重配置(DFX)原理与工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:45:31 阅读更多 →
Wokwi ESP32 MicroPython库配置全指南:解决ImportError与OTA调试难题

Wokwi ESP32 MicroPython库配置全指南:解决ImportError与OTA调试难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:45:31 阅读更多 →
把笔记变成网站:3种方式将Foam知识库发布到GitHub Pages、Vercel与Netlify

把笔记变成网站:3种方式将Foam知识库发布到GitHub Pages、Vercel与Netlify

把笔记变成网站:3种方式将Foam知识库发布到GitHub Pages、Vercel与Netlify 【免费下载链接】foam A personal knowledge management and sharing system for VSCode 项目地址: https://gitcode.com/gh_mirrors/fo/foam Foam 是一款基于 VSCode 的个人知识管理…

2026/9/21 2:45:31 阅读更多 →
开源缓存一致性互连协议对比:从CHI七态到PBR路由的状态机深度解析

开源缓存一致性互连协议对比:从CHI七态到PBR路由的状态机深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:45:31 阅读更多 →
AFSIM源码编译实战:从环境配置到二次开发全流程解析

AFSIM源码编译实战:从环境配置到二次开发全流程解析

我最早接触AFSIM的时候,和大多数人一样,直接下载官方预编译工具包,装上就能跑通示例,感觉门槛并不高。真正让我决定从头编译一遍的,是一次二次开发需求:我需要在仿真框架内部挂一个自定义消息处理逻辑&…

2026/9/21 2:45:31 阅读更多 →
STM32智能家居控制系统设计:从硬件选型到软件实现全解析

STM32智能家居控制系统设计:从硬件选型到软件实现全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:44:31 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →