项目地址:https://github.com/Bigkoo/Android-PickerView
一.项目导入
//第三方多级联动
implementation 'com.contrarywind:Android-PickerView:4.1.9'
二.时间选择器
2.1普通使用
//时间选择器
TimePickerView pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
LogUtils.v(TimeUtil.dateToString(date));
}
}).build();
pvTime.show();
/**
* @author Longchengbin
* @description date转字符串
* @since 2020-10-10 16:00
**/
public static String dateToString(Date date) {
SimpleDateFormat format = new SimpleDateFormat(DateKeys.KEY_YYMMDDHHMMSS, Locale.getDefault());
return format.format(date);
}
public static final String KEY_YYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss";
2.2进阶使用
//时间选择器当前选择时间,起始选择时间,终止选择时间
Calendar selectedDate = Calendar.getInstance();
Calendar startDate = Calendar.getInstance();
Calendar endDate = Calendar.getInstance();
//正确设置方式 原因:注意事项有说明
startDate.set(1990,0,1);
endDate.set(2020,11,31);
selectedDate.set(1992,10,17);
TimePickerView pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date,View v) {//选中事件回调
LogUtils.v(TimeUtil.dateToString(date));
}
})
// .setType(new boolean[]{true, true, true, true, true, true})// 默认显示年月日
.setCancelText("Cancel")//取消按钮文字
.setSubmitText("Sure")//确认按钮文字
.setContentTextSize(18)//滚轮文字大小
.setTitleSize(20)//标题文字大小
.setTitleText("Title")//标题文字
.setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示
.isCyclic(true)//是否循环滚动
.setTitleColor(Color.BLACK)//标题文字颜色
// .setSubmitColor(Color.BLUE)//确定按钮文字颜色
// .setCancelColor(Color.BLUE)//取消按钮文字颜色
// .setTitleBgColor(0xFF666666)//标题背景颜色 Night mode
// .setBgColor(0xFF333333)//滚轮背景颜色 Night mode
.setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
.setRangDate(startDate,endDate)//起始终止年月日设定
.setLabel("年","月","日","时","分","秒")//默认设置为年月日时分秒
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
// .isDialog(true)//是否显示为对话框样式
.build();
pvTime.show();
2.3注意事项
- 注意:当我们进行设置时间的启始位置时,需要特别注意月份的设定
- 原因:Calendar组件内部的月份,是从0开始的,即0-11代表1-12月份
- 错误使用案例: startDate.set(2013,1,1); endDate.set(2020,12,1);
- 正确使用案例: startDate.set(2013,0,1); endDate.set(2020,11,1);
三.条件选择器
2.1普通使用
OptionsPickerView pvOptions = new OptionsPickerBuilder(MainActivity.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);
pvOptions.show();
2.2进阶使用
//初始化数据
List<String> carTypeBig = DataUtil.getCarTypeBig(this);
List<List<String>> carType = DataUtil.getCarType(this);
OptionsPickerView pickerView = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override //用户选择后的回调
public void onOptionsSelect(int options1, int options2, int options3, View v) {
LogUtils.v(carTypeBig.get(options1) + ""+carType.get(options1).get(options2)
+ " " + options3);
}//用户滚动时的监听
}).setOptionsSelectChangeListener(new OnOptionsSelectChangeListener() {
@Override
public void onOptionsSelectChanged(int options1, int options2, int options3) {
String str = "options1: " + options1 + "\noptions2: "
+ options2 + "\noptions3: " + options3;
LogUtils.i(str);
}
})
.setSubmitText("确定")//确定按钮文字
.setCancelText("取消")//取消按钮文字
.setTitleText("车辆类型选择")//标题
.setSubCalSize(18)//确定和取消文字大小
.setTitleSize(20)//标题文字大小
// .setTitleColor(Color.BLACK)//标题文字颜色
// .setSubmitColor(Color.BLUE)//确定按钮文字颜色
// .setCancelColor(Color.BLUE)//取消按钮文字颜色
// .setTitleBgColor(0xFF333333)//标题背景颜色 Night mode
// .setBgColor(0xFF000000)//滚轮背景颜色 Night mode
.setContentTextSize(16)//滚轮文字大小
// .setLinkage(false)//设置是否联动,默认true
// .setLabels("xx", "yy", "qq")//设置选择的三级单位
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.setCyclic(false, false, false)//循环与否
.setSelectOptions(0, 0) //设置默认选中项
.setOutSideCancelable(false)//点击外部dismiss 默认 true
.isDialog(true)//是否显示为对话框样式
.isRestoreItem(true)//切换时是否还原,设置默认选中第一项。
.build();
pickerView.show();
//pickerView 设置数据
pickerView.setPicker(carTypeBig, carType);
2.3数据添加
/**
* @author Longchengbin
* @description 获取车辆类型大类
* @since 2020-10-14 14:27
**/
public static List<String> getCarTypeBig(Context context) {
if (context == null) {
return null;
}
String[] stringArray = context.getResources().getStringArray(R.array.car_type_list);
return Arrays.asList(stringArray);
}
/**
* @author Longchengbin
* @description 获取车辆类型小类
* @since 2020-10-14 14:28
**/
public static List<List<String>> getCarType(Context context) {
if (context == null) {
return null;
}
List<List<String>> carTypeBList = new ArrayList<>();
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.small_passenger_car_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.middle_passenger_car_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.large_passenger_car_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.micro_passenger_car_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.micro_trucks_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.light_trucks_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.medium_trucks_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.heavy_trucks_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.special_car_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.low_speed_truck_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.heavy_semi_trailer_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.medium_semi_trailer_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.light_semi_trailer_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.tram_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.heavy_all_trailer_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.medium_all_trailer_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.light_all_trailer_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.mechanical_cars_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.motorcycle_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.tricycle_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.tractor_list)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.farm_tractor_list)));
List<String> strings = new ArrayList<>();
strings.add("其他车");
carTypeBList.add(strings);
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.wxbg)));
carTypeBList.add(Arrays.asList(context.getResources().getStringArray(R.array.wxqg)));
return carTypeBList;