1、时间选择器
在项目开发当中,时间的选择会是经常的使用到,有的时候需要选择到年、月、日、时、分,但是基本的dialog选择在不同的Android系统上可能会出现多种情况,所以这里选择使用TimePickerView选择器。照例,先上实现之后的功能...
Android-PickerView是一款仿iOS的PickerView控件,并封装了时间选择和选项选择这两种选择器,因为目前我们只使用到时间选择器,所以这里只具体说关于时间的选择。在使用之前我们需要先添加Gradle依赖
compile 'com.contrarywind:Android-PickerView:3.x'
//实际引入请把"3.x"替换成具体版本号,最新版本号请以GitHub上面提供的为准
TimePickerView —— 时间选择器
支持选择年、月、日的范围。
支持年月日时分秒显示。
支持设置当前默认时间。
支持自定义布局。
支持自定义标题栏。
支持“年,月,日,时,分,秒”等选项的单位(label)显示、隐藏和自定义。
支持dialog 模式显示。
支持自定义设置容器。
GitHub项目官方地址
在项目中添加代码,这里我们具体说下TimePickerView的自定义样式
pvTime = new TimePickerView.Builder(MainActivity.this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date,View v) {//选中事件回调
tvTime.setText(getTime(date));
}
})
.setType(TimePickerView.Type.ALL)//默认全部显示
.setCancelText("Cancel")//取消按钮文字
.setSubmitText("Sure")//确认按钮文字
.setContentSize(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
.setRange(calendar.get(Calendar.YEAR) - 20, calendar.get(Calendar.YEAR) + 20)//默认是1900-2100年
.setDate(new Date())// 默认是系统时间*/
.setLabel("年","月","日","时","分","秒")
.build();
但是在实际项目中我们有的时候需要保存的时间格式并不能为传统的如2018年06月25日17:00这样子,我们可能需要将这样的时间格式转化为我们需要的格式然后上传到服务器端,我们首先需要在点击时间选择的按钮后弹出时间选择器
case R.id.time_start://开始时间
showTimeSelector("选择开始时间", binding.startTime);
break;
case R.id.time_end://结束时间
showTimeSelector("选择结束时间", binding.endTime);
break;
接下来就是定义我们所要的时间选择器的格式
/**
* 时间选择器
* flag: 1 开始时间,2 结束时间
*
* @param title
*/
private void showTimeSelector(String title, final TextView view) {
TimePickerView.Builder builder = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
String time = getFormatDate(calendar);
view.setText(time);
}
});
TimePickerView timePickerView = builder.setTitleText(title)
.setTitleColor(ContextCompat.getColor(this, R.color.default_font_color))
.setSubmitColor(ContextCompat.getColor(this, R.color.colortheme))
.setCancelColor(ContextCompat.getColor(this, R.color.colortheme))
.setType(TimePickerView.Type.YEAR_MONTH_DAY_HOUR_MIN)//选择器时间显示到时分
.build();
timePickerView.setDate(Calendar.getInstance());
timePickerView.show();
}
最后我们需要将时间格式进行转换成我们所需要的格式,我这里需要的是常用的2018--6-25 17:00这样的格式
private String getFormatDate(Calendar calendar) {
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
StringBuilder sb = new StringBuilder(calendar.get(Calendar.YEAR) + "-");
if (month < 10) {
sb.append("0").append(month).append("-");
} else {
sb.append(month).append("-");
}
if (day < 10) {
sb.append("0").append(day).append(" ");
} else {
sb.append(day).append(" ");
}
if (hour < 10) {
sb.append("0").append(hour).append(":");
} else {
sb.append(hour).append(":");
}
if (minute < 10) {
sb.append("0").append(minute);
} else {
sb.append(minute);
}
return sb.toString();
}
这样我们所需要的时间选择器功能便实现了。当然,PickerView还有其他的选择功能,这里就不再细说,只贴上它的功能模块
上面的方法虽然也能够很好的实现我们所需要的结果,但是好像看起来并没有那么简介。。。下面有一个更加简洁的方法可以直接实现时间的选择功能,其中的setType为选择年月日时分秒是否精确到,true精确到,false不精确到
TimePickerView timePickerView = new TimePickerView.Builder(this, (date, v) -> {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
}).setCancelText("取消")
.setSubmitText("确认")
.setTitleText("选择时间")
.setType(new boolean[]{true, true, true, false, false, false})
.isCenterLabel(false)
.build();
timePickerView.setDate(Calendar.getInstance());
timePickerView.show();
2、条件选择器
OptionsPickerView pickerView = new OptionsPickerView.Builder(this, (options1, options2, options3, v) -> {
textId= infoList.get(options1).getId();
Log.e("textId", "textId:-------------" + textId);
}).setCancelText("取消")
.setSubmitText("确定")
.setTitleText("标题")
.setSubmitColor(getResources().getColor(R.color.colorMain))
.setCancelColor(getResources().getColor(R.color.colorHint))
.build();
List content = new ArrayList<>();
for (int i = 0; i < infoList.size(); i++) {
content.add(infoList.get(i).getContent());
}
pickerView.setPicker(content);
pickerView.show();
其中textId= infoList.get(options1).getId();获取到的是所取得列表中的每个item的id,List
content = new ArrayList<>(); 是我们所取到的列表文字在选择器中的展示,当然这里可以判断content的size(),去选择选择器是否显示【pickerView.show();】