pickView的简介与使用:

本文介绍了Android PickerView组件,包括WheelView、TimePickerView和OptionsPickerView的特性及使用方法,如时间选择器的格式设置、选项选择器的联动功能等,并提供了XML布局引用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

Android-PickerView是一款仿iOS的PickerView控件,并封装了时间选择和选项选择这两种选择器,详细特性如下

WheelView —— 基础控件
带有3D圆弧效果。
支持文字、颜色、大小设置。
支持背景颜色设置。
支持item的分隔线设置。
支持item间距设置。
支持设置是否循环。
OptionsPickerView —— 选项选择器
支持一、二、三级联动数据。
支持一、二、三级不联动数据。
支持自定义布局。
支持自定义标题栏。
支持“省,市,区”等选项的单位(label)显示、隐藏和自定义。
支持dialog 模式显示。
支持自定义设置容器。
TimePickerView —— 时间选择器
支持选择年、月、日的范围。
支持年月日时分秒显示。
支持设置当前默认时间。
支持自定义布局。
支持自定义标题栏。
支持“年,月,日,时,分,秒”等选项的单位(label)显示、隐藏和自定义。
支持dialog 模式显示。
支持自定义设置容器。

其中,WheelView 可在XML布局中直接引用:

<com.bigkoo.pickerview.lib.WheelView
android:id="@+id/wv_options"
android:layout_width=“match_parent”
android:layout_height=“wrap_content” />

TimePickerView: 时间选择器,支持年月日时分,年月日,年月,时分等格式 ,效果如下:

在这里插入图片描述

OptionsPickerView: 选项选择器,支持一,二,三级选项选择,并且可以设置是否联动 ,效果如下:

在这里插入图片描述

二、如何使用

1、导包

implementation 'com.contrarywind:Android-PickerView:4.1.8'

2、时间选择器

TimePickerView pvTime = new TimePickerBuilder(DatePickActivity.this, new OnTimeSelectListener() {
    @Override
    public void onTimeSelect(Date date, View v) {
        SimpleDateFormat sdf = new SimpleDateFormat();
        String aa=sdf.format(date);
        tv1.setText(aa);
    }
}).build();
pvTime.show();

3、三级联动

**1.获得数据
本例中数据从assets文件中获取json
2.解析数据
本例中使用Gson

数据存储**

private List<JsonBean> options1Items = new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();

数据解析

private void initJsonData() {//解析数据
    String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据
    ArrayList<JsonBean> jsonBean = parseData(JsonData);//用Gson 转成实体


    /**
     * 添加省份数据
     *
     * 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
     * PickerView会通过getPickerViewText方法获取字符串显示出来。
     */
    options1Items = jsonBean;
    for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
        ArrayList<String> cityList = new ArrayList<>();//该省的城市列表(第二级)
        ArrayList<ArrayList<String>> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)


        for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
            String cityName = jsonBean.get(i).getCityList().get(c).getName();
            cityList.add(cityName);//添加城市
            ArrayList<String> city_AreaList = new ArrayList<>();//该城市的所有地区列表


            //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
            /*if (jsonBean.get(i).getCityList().get(c).getArea() == null
                    || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
                city_AreaList.add("");
            } else {
                        city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
          }*/
            city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
            province_AreaList.add(city_AreaList);//添加该省所有地区数据
        }
        /**
         * 添加城市数据
         */
        options2Items.add(cityList);
        /**
         * 添加地区数据
         */
        options3Items.add(province_AreaList);
    }
    mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);

3.选择器使用

private void showPickerView() {// 弹出选择器

    OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
        @Override
        public void onOptionsSelect(int options1, int options2, int options3, View v) {
            //返回的分别是三个级别的选中位置


            String opt1tx = options1Items.size() > 0 ?
                    options1Items.get(options1).getPickerViewText() : "";

            String opt2tx = options2Items.size() > 0
                    && options2Items.get(options1).size() > 0 ?
                    options2Items.get(options1).get(options2) : "";


            String opt3tx = options2Items.size() > 0
                    && options3Items.get(options1).size() > 0
                    && options3Items.get(options1).get(options2).size() > 0 ?
                    options3Items.get(options1).get(options2).get(options3) : "";


            String tx = opt1tx + opt2tx + opt3tx;
            Toast.makeText(MainActivity.this, tx, Toast.LENGTH_SHORT).show();
        }
    })
          .setTitleText("城市选择")
            .setDividerColor(Color.BLACK)
         .setTextColorCenter(Color.BLACK) //设置选中项文字颜色
           .setContentTextSize(20)
         .build();
    /*pvOptions.setPicker(options1Items);//一级选择器
    pvOptions.setPicker(options1Items, options2Items);//二级选择器*/
    pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
   pvOptions.show();







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值