3行代码搞定Android时间选择器:Android-PickerView极速集成指南

3行代码搞定Android时间选择器:Android-PickerView极速集成指南

【免费下载链接】Android-PickerView This is a picker view for android , support linkage effect, timepicker and optionspicker.(时间选择器、省市区三级联动) 【免费下载链接】Android-PickerView 项目地址: https://gitcode.com/gh_mirrors/an/Android-PickerView

你是否还在为Android原生时间选择器的丑陋界面抓狂?还在为复杂的日期逻辑处理焦头烂额?Android-PickerView帮你3行核心代码实现iOS风格的时间选择功能,让用户体验瞬间提升一个档次。读完本文你将获得:

  • 3分钟内完成时间选择器集成的实操能力
  • 个性化样式定制的核心技巧
  • 常见需求如农历切换、时间范围限制的解决方案
  • 官方Demo全解析,轻松应对复杂场景

认识Android-PickerView

Android-PickerView是一款仿iOS的PickerView控件,提供了两种核心选择器:

  • TimePickerView(时间选择器):支持年月日时分、年月日、年月、时分等多种格式
  • OptionsPickerView(选项选择器):支持一、二、三级选项选择,可设置是否联动

项目核心模块结构:

该库已被招商银行"掌上生活"等知名App采用,稳定性和实用性经过市场验证:

时间选择器效果 夜间模式效果 农历选择效果

极速集成步骤

1. 添加依赖

在项目的build.gradle中添加Jcenter仓库依赖:

compile 'com.contrarywind:Android-PickerView:4.1.9'

或使用Maven:

<dependency>
<groupId>com.contrarywind</groupId>
<artifactId>Android-PickerView</artifactId>
<version>4.1.9</version>
<type>pom</type>
</dependency>

2. 3行核心代码实现时间选择器

在需要使用时间选择器的Activity中,添加以下代码:

// 创建时间选择器
TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {
    @Override
    public void onTimeSelect(Date date, View v) {
        // 选中时间回调
        Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
    }
}).build();

// 显示时间选择器
pvTime.show();

其中getTime()方法用于格式化日期显示:

private String getTime(Date date) {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return format.format(date);
}

3. 基础样式定制

通过TimePickerBuilder可以轻松定制选择器样式,以下是常用配置:

Calendar selectedDate = Calendar.getInstance();
Calendar startDate = Calendar.getInstance();
startDate.set(2013, 0, 1); // 注意月份是从0开始的
Calendar endDate = Calendar.getInstance();
endDate.set(2025, 11, 31);

pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
    @Override
    public void onTimeSelect(Date date, View v) {
        tvTime.setText(getTime(date));
    }
})
.setType(new boolean[]{true, true, true, true, true, true}) // 年月日时分秒
.setCancelText("取消")//取消按钮文字
.setSubmitText("确定")//确认按钮文字
.setContentSize(18)//滚轮文字大小
.setTitleSize(20)//标题文字大小
.setTitleText("选择日期时间")//标题文字
.setOutSideCancelable(false)//点击外部是否取消
.isCyclic(true)//是否循环滚动
.setDate(selectedDate)//默认选中时间
.setRangDate(startDate,endDate)//时间范围
.setLabel("年","月","日","时","分","秒")//单位标签
.build();

高级功能实战

农历与公历切换

Android-PickerView内置农历支持,通过自定义布局实现公农历切换功能:

// 公农历切换选择器初始化
private void initLunarPicker() {
    Calendar selectedDate = Calendar.getInstance();
    Calendar startDate = Calendar.getInstance();
    startDate.set(2014, 1, 23);
    Calendar endDate = Calendar.getInstance();
    endDate.set(2069, 2, 28);
    
    pvCustomLunar = new TimePickerBuilder(this, new OnTimeSelectListener() {
        @Override
        public void onTimeSelect(Date date, View v) {
            Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
        }
    })
    .setDate(selectedDate)
    .setRangDate(startDate, endDate)
    .setLayoutRes(R.layout.pickerview_custom_lunar, new CustomListener() {
        @Override
        public void customLayout(final View v) {
            // 公农历切换CheckBox
            CheckBox cb_lunar = (CheckBox) v.findViewById(R.id.cb_lunar);
            cb_lunar.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // 切换农历/公历
                    pvCustomLunar.setLunarCalendar(!pvCustomLunar.isLunarCalendar());
                }
            });
        }
    })
    .setType(new boolean[]{true, true, true, false, false, false})
    .isCenterLabel(false)
    .build();
}

对应的自定义布局文件:app/src/main/res/layout/pickerview_custom_lunar.xml

效果展示: 农历选择效果

自定义时间选择器样式

通过修改布局文件和Builder配置,可以实现完全个性化的时间选择器。例如只显示时分秒的选择器:

// 自定义时间选择器
private void initCustomTimePicker() {
    Calendar selectedDate = Calendar.getInstance();
    Calendar startDate = Calendar.getInstance();
    startDate.set(2014, 1, 23);
    Calendar endDate = Calendar.getInstance();
    endDate.set(2027, 2, 28);
    
    pvCustomTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
        @Override
        public void onTimeSelect(Date date, View v) {
            btn_CustomTime.setText(getTime(date));
        }
    })
    .setDate(selectedDate)
    .setRangDate(startDate, endDate)
    .setLayoutRes(R.layout.pickerview_custom_time, new CustomListener() {
        @Override
        public void customLayout(View v) {
            // 自定义布局中的控件初始化
            final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
            ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
            tvSubmit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    pvCustomTime.returnData();
                    pvCustomTime.dismiss();
                }
            });
            ivCancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    pvCustomTime.dismiss();
                }
            });
        }
    })
    .setType(new boolean[]{false, false, false, true, true, true}) // 只显示时分秒
    .setLabel("年", "月", "日", "时", "分", "秒")
    .isCenterLabel(false)
    .build();
}

自定义布局文件:app/src/main/res/layout/pickerview_custom_time.xml

城市三级联动选择

除了时间选择,Android-PickerView还支持选项选择器,特别适合实现省市区三级联动:

// 选项选择器初始化
private void initOptionPicker() {
    pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
        @Override
        public void onOptionsSelect(int options1, int options2, int options3, View v) {
            // 返回的分别是三个级别的选中位置
            String tx = options1Items.get(options1).getPickerViewText()
                    + options2Items.get(options1).get(options2);
            btn_Options.setText(tx);
        }
    })
    .setTitleText("城市选择")
    .setContentTextSize(20)
    .setDividerColor(Color.LTGRAY)
    .setSelectOptions(0, 1)
    .setLabels("省", "市", "区")
    .build();
    
    // 设置数据源
    pvOptions.setPicker(options1Items, options2Items);
}

完整的省市区数据解析示例可以参考:app/src/main/java/com/bigkoo/pickerviewdemo/JsonDataActivity.java

效果展示: 城市选择效果

官方Demo完整解析

官方Demo提供了所有功能的实现示例,位于app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java,主要包含以下功能演示:

主要演示功能

  1. 基础时间选择器:展示默认样式的时间选择器
  2. 自定义时间选择器:演示如何通过自定义布局修改时间选择器样式
  3. 农历时间选择器:公农历切换功能实现
  4. 选项选择器:二级联动示例
  5. 自定义选项选择器:自定义布局的选项选择器
  6. 非联动选项选择器:三级非联动选择示例
  7. 省市区选择器:JSON数据解析与三级联动

布局文件说明

Demo中使用的布局文件位于app/src/main/res/layout/目录下,主要包括:

注意事项与常见问题

月份设置问题

重要:Calendar组件的月份是从0开始的(0-11代表1-12月),设置起始和终止日期时需特别注意:

// 错误示例
startDate.set(2013, 1, 1); // 实际会设置为2013年2月1日
endDate.set(2020, 12, 1); // 实际会设置为2021年1月1日

// 正确示例
startDate.set(2013, 0, 1); // 2013年1月1日
endDate.set(2020, 11, 31); // 2020年12月31日

自定义布局注意事项

自定义布局时,id为optionspickertimepicker的布局及其子控件必须保留,否则会报空指针异常。可以参考Demo中的自定义布局文件:

只需要WheelView基础控件

如果只需要基础的WheelView控件自行扩展,可以单独依赖wheelview库:

compile 'com.contrarywind:wheelview:4.1.0'

WheelView的使用示例:

<com.contrarywind.view.WheelView
    android:id="@+id/wheelview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
WheelView wheelView = findViewById(R.id.wheelview);
wheelView.setCyclic(false);
final List<String> mOptionsItems = new ArrayList<>();
mOptionsItems.add("item0");
mOptionsItems.add("item1");
mOptionsItems.add("item2");
wheelView.setAdapter(new ArrayWheelAdapter(mOptionsItems));
wheelView.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(int index) {
        Toast.makeText(MainActivity.this, "" + mOptionsItems.get(index), Toast.LENGTH_SHORT).show();
    }
});

项目获取与安装

直接依赖

通过Gradle或Maven直接依赖Jcenter仓库中的库(推荐):

compile 'com.contrarywind:Android-PickerView:4.1.9'

源码获取

通过以下地址获取完整源码:

git clone https://gitcode.com/gh_mirrors/an/Android-PickerView

源码目录结构:

Android-PickerView/
├── app/                 // 示例Demo
├── pickerview/          // 库源码
├── wheelview/           // WheelView基础控件
└── preview/             // 预览图片

总结

Android-PickerView通过简洁的API设计和丰富的自定义选项,帮助开发者快速实现高质量的选择器功能。本文介绍的3行代码集成方法只是基础,通过自定义布局和样式,几乎可以实现任何iOS风格的选择器效果。

官方文档和更多高级用法可以参考项目Wiki(已停止更新,建议直接查看源码和Demo)。如果需要实现更复杂的选择器功能,可以直接修改源码进行定制。

最后,项目虽已停止更新,但现有版本功能稳定,可以通过下载源码的方式进行二次开发和维护,满足特定需求。

【免费下载链接】Android-PickerView This is a picker view for android , support linkage effect, timepicker and optionspicker.(时间选择器、省市区三级联动) 【免费下载链接】Android-PickerView 项目地址: https://gitcode.com/gh_mirrors/an/Android-PickerView

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值