告别碎片化UI:Android-PickerView实现跨平台时间与选项选择器统一方案

告别碎片化UI: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-PickerView作为一款成熟的选择器控件库,通过封装时间选择器(TimePickerView)和选项选择器(OptionsPickerView),提供了开箱即用的解决方案,帮助开发者快速构建一致的交互体验。

核心功能与应用场景

Android-PickerView主要包含两大核心组件,覆盖了绝大多数选择器场景需求:

时间选择器(TimePickerView)

支持年月日时分秒、年月日、年月、时分等多种时间格式,可设置起始和终止日期,满足从生日选择到日程安排的各类时间输入需求。

时间选择器示例

核心实现类位于pickerview/view/TimePickerView.java,通过构建者模式(Builder)实现灵活配置:

// 基础时间选择器初始化示例
TimePickerView pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
    @Override
    public void onTimeSelect(Date date, View v) {
        Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
    }
}).build();

选项选择器(OptionsPickerView)

支持一、二、三级选项联动,特别适合省市区选择、分类筛选等场景。通过设置是否联动(setLinkage()),可灵活适配不同数据结构需求。

省市区选择示例

选项选择器核心代码在pickerview/view/OptionsPickerView.java,典型三级联动实现:

// 三级联动选项选择器示例
OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
    @Override
    public void onOptionsSelect(int options1, int option2, int options3, View v) {
        String tx = options1Items.get(options1).getPickerViewText()
                + options2Items.get(options1).get(option2)
                + options3Items.get(options1).get(option2).get(options3).getPickerViewText();
        tvOptions.setText(tx);
    }
}).build();
pvOptions.setPicker(options1Items, options2Items, options3Items);

快速集成指南

1. 添加依赖

通过Gradle或Maven将库引入项目:

// Gradle依赖
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. 基础使用流程

以省市区选择为例,完整实现包含数据准备、选择器初始化和显示三个步骤:

数据准备

创建符合IPickerViewData接口的数据模型:

// 省份数据模型示例
public class ProvinceBean implements IPickerViewData {
    private String name;
    
    @Override
    public String getPickerViewText() {
        return name;
    }
}
初始化与显示

MainActivity.java中初始化并显示选择器:

// 省市区选择器初始化
OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
    @Override
    public void onOptionsSelect(int options1, int option2, int options3, View v) {
        // 处理选择结果
    }
})
.setLinkage(true) // 设置联动
.setLabels("省", "市", "区") // 设置单位
.build();

// 设置数据源
pvOptions.setPicker(options1Items, options2Items, options3Items);
// 显示选择器
pvOptions.show();

高级特性与定制方案

自定义布局实现

对于特殊UI需求,Android-PickerView支持完全自定义布局。通过setLayoutRes()方法指定自定义布局文件,并通过CustomListener处理交互逻辑。

自定义布局示例

自定义布局实现位于app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.javainitCustomOptionPicker()方法:

// 自定义布局选项选择器示例
pvCustomOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
    @Override
    public void onOptionsSelect(int options1, int option2, int options3, View v) {
        String tx = cardItem.get(options1).getPickerViewText();
        btn_CustomOptions.setText(tx);
    }
})
.setLayoutRes(R.layout.pickerview_custom_options, 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) {
                pvCustomOptions.returnData();
                pvCustomOptions.dismiss();
            }
        });
    }
})
.build();

自定义布局文件pickerview_custom_options.xml需包含id为optionspicker的核心容器。

农历日期支持

针对中国本地化需求,库中提供了农历日期选择功能,通过pickerview/utils/LunarCalendar.java实现农历转换逻辑。

农历选择示例

启用农历显示只需在时间选择器中设置:

// 农历时间选择器配置
.setType(new boolean[]{true, true, true, false, false, false})
.setLunarCalendar(true)

基础控件扩展:WheelView

对于需要高度定制选择器的场景,Android-PickerView提供了基础的WheelView控件,位于wheelview/view/WheelView.java,可直接集成到自定义布局中。

<!-- WheelView XML布局示例 -->
<com.contrarywind.view.WheelView
    android:id="@+id/wheelview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Java代码初始化:

WheelView wheelView = findViewById(R.id.wheelview);
wheelView.setCyclic(false);
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();
    }
});

实际应用案例

Android-PickerView已被广泛应用于各类商业应用,如招商银行"掌上生活"APP的条件选择功能:

商业应用示例

其核心优势在于:

  • 代码复用:避免重复开发基础选择器功能
  • 交互统一:提供一致的选择体验,降低用户学习成本
  • 灵活配置:通过构建者模式和自定义布局满足多样化需求

完整示例代码可参考app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java,包含了时间选择、选项选择、自定义布局等所有功能的演示实现。

总结与注意事项

Android-PickerView通过封装复杂的选择器逻辑,为开发者提供了高效可靠的解决方案。使用过程中需注意:

  1. 月份处理:Calendar类月份从0开始(0-11代表1-12月),设置日期范围时需特别注意
  2. 数据准备:三级联动需按特定数据结构组织(List<List<List<...>>>
  3. 布局规范:自定义布局必须包含id为optionspickertimepicker的核心容器

通过合理利用Android-PickerView,开发者可以将精力集中在业务逻辑实现上,大幅提升开发效率。更多高级配置和使用技巧可参考项目官方文档Wiki

【免费下载链接】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、付费专栏及课程。

余额充值