
Android-PickerView 时间选择器自定义实战3 步配置出贴合业务的年月日时分秒选择器【免费下载链接】Android-PickerViewThis is a picker view for android , support linkage effect, timepicker and optionspicker.时间选择器、省市区三级联动项目地址: https://gitcode.com/gh_mirrors/an/Android-PickerView做预约、打卡类 App 时系统自带 TimePicker 样式固定、格式难调连只选时分秒标签换成英文这类基础需求都难以满足。Android-PickerView 是支持联动效果与时间/选项选择的滚轮选择器库其 TimePickerBuilder 让你用十几行代码定制年月日时分秒的显示与样式。读完本文你将掌握时间单位裁剪、标签改写、范围限定与自定义布局四类实战玩法。1. 先搞清一个问题为什么需要配置式时间选择器原生 TimePicker 的可定制点很少单位标签写死、无法单独隐藏某一列、主题配色受限。而业务上我们经常遇到出生日期只要年月闹钟只要时分这类诉求逐个重写滚轮组件成本极高。Android-PickerView 的方案是把时间选择器拆成构建器Builder 参数集PickerOptions 视图TimePickerView三层。开发者只跟TimePickerBuilder打交道它把几十个配置项全部收敛为链式方法最后build()生成视图show()弹出。核心配置项如下配置方法解决的问题参数说明setType(boolean[6])控制哪些时间单位可见按年、月、日、时、分、秒顺序传布尔值setLabel(...)重写单位标签文字依次传 6 个字符串setDate(Calendar)设置默认选中时间不传则默认当前时间setRangDate(start, end)限制可选时间范围两个 Calendar默认 1900-2100 年setLayoutRes(res, listener)替换整套布局布局 id CustomListener回调setContentTextSize / setDividerColor / setTextColorCenter调整字号、分割线与文字颜色数值或颜色值setLineSpacingMultiplier(float)控制条目间距取值范围 1.0f-4.0fisDialog(boolean)切换底部弹窗模式默认 false挂载到 DecorViewsetLunarCalendar(boolean)启用农历显示支持 1900-2100 年2. 实战第一步用 setType 裁剪出时分秒专属选择器需求背景闹钟设置页只需要时、分、秒三列。最直接的写法如下TimePickerView picker new TimePickerBuilder(this, new OnTimeSelectListener() { Override public void onTimeSelect(Date date, View v) { // 回调拿到的是完整 Date自行格式化即可 tvResult.setText(new SimpleDateFormat(HH:mm:ss, Locale.CHINA).format(date)); } }) .setType(new boolean[]{false, false, false, true, true, true}) // 年月日隐藏时分秒显示 .build(); picker.show(); // 弹出选择器注意setType的数组长度必须是 6且顺序固定为年月日时分秒写错位置会出现隐藏了小时却显示了年这类诡异问题。3. 实战第二步把单位标签和配色改成想要的样子默认标签是年、月、日、时、分、秒。国际版 App 里想换成Y / M / D / h / m / s并让选中文字与分割线统一为品牌色.setLabel(Y, M, D, h, m, s) // 六个标签全部重写 .setTextXOffset(0, 0, 0, 40, 0, -40) // 微调时秒两列的 X 偏移让视觉对齐 .isCenterLabel(false) // false每个 item 都带标签true只中间一列带 .setDividerColor(0xFF24AD9D) // 分割线颜色 .setTextColorCenter(0xFF24AD9D) // 选中项文字颜色setTextXOffset和isCenterLabel是容易被忽略但很出效果的细节前者解决时分列因文字宽度不同导致的错位后者决定标签是每行都显示还是只在选中行显示。4. 实战第三步锁定默认值与可选范围防止用户选错时间体检预约场景要求默认今天可选范围限制在 2014 年 2 月到 2027 年 3 月且只精确到分Calendar selected Calendar.getInstance(); Calendar start Calendar.getInstance(); start.set(2014, 1, 23); // 月份从 0 计1 表示二月 Calendar end Calendar.getInstance(); end.set(2027, 2, 28); // 2 表示三月 picker new TimePickerBuilder(this, listener) .setDate(selected) // 默认选中今天 .setRangDate(start, end) // 限定范围越界自动回收 .setType(new boolean[]{true, true, true, true, true, false}) // 年到分不要秒 .build();这里最容易翻车的是Calendar 月份从 0 开始set(2014, 1, 23)实际是 2 月 23 日写错一个数字会让范围整体偏移一个月。5. 进阶玩法自定义布局把选择器做成品牌组件默认顶栏想换成图片按钮、加自定义标题setLayoutResCustomListener可以整体替换布局。配合示例里的pickerview_custom_time.xml写一个带完成/取消的自定义时间选择器private TimePickerView pvCustomTime; private void initCustomTimePicker() { pvCustomTime new TimePickerBuilder(this, new OnTimeSelectListener() { Override public void onTimeSelect(Date date, View v) { btn.setText(new SimpleDateFormat(yyyy-MM-dd HH:mm, Locale.CHINA).format(date)); } }) .setLayoutRes(R.layout.pickerview_custom_time, new CustomListener() { Override public void customLayout(View v) { TextView tvFinish v.findViewById(R.id.tv_finish); ImageView ivCancel v.findViewById(R.id.iv_cancel); tvFinish.setOnClickListener(v1 - { pvCustomTime.returnData(); pvCustomTime.dismiss(); }); ivCancel.setOnClickListener(v1 - pvCustomTime.dismiss()); } }) .setContentTextSize(18) .setLineSpacingMultiplier(1.2f) .setDividerColor(0xFF24AD9D) .build(); }自定义布局里returnData()负责把当前选中值回传给onTimeSelect先取数再关闭顺序不能反。此外夜间主题用setBgColorsetTitleBgColor组合即可一键切换。6. 避坑清单项目里最常见的 4 个坑自定义布局空指针布局中必须保留 id 为timepicker或optionspicker的容器及其子WheelView删掉或改名都会在初始化时崩溃建议从项目res/layout/里拷贝模板再改。可见条目数传偶数setItemVisibleCount传偶数会自动 1如传 6 实际显示 7 条直接传奇数更直观。间距倍数越界setLineSpacingMultiplier超出 1.0-4.0f 会被内部钳制别指望传 5f 拉开行距。setBackgroundId已废弃外部遮罩颜色请改用setOutSideColor旧方法虽能编译但行为不可控。7. 复盘与扩展所有时间选择器定制都从TimePickerBuilder出发先裁剪单位setType再定范围setRangDate最后调样式。单位裁剪注意数组顺序范围与默认值注意 Calendar 月份 0-11 的偏移。深度定制走setLayoutRes务必保留timepicker容器与子WheelView并用returnData()回传数据。农历、滚动实时回调、Fragment 内嵌等能力可参考 Demo 源码app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java中的initCustomTimePicker()与initLunarPicker()。完整的可运行 Demo 可通过git clone https://gitcode.com/gh_mirrors/an/Android-PickerView获取把app模块跑起来逐个按钮体验。样式参数这种东西边调边看比背文档快得多动手改几个值你的专属时间选择器很快就能上线。【免费下载链接】Android-PickerViewThis is a picker view for android , support linkage effect, timepicker and optionspicker.时间选择器、省市区三级联动项目地址: https://gitcode.com/gh_mirrors/an/Android-PickerView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考