Android实现双时间选择器
一.、设计图
二、实现代码:
1. 布局文件代码(dialog_time_picker.xml)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_container_timepicker" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:background="@color/design_default_color_error"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@color/white"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="@dimen/dimen_16dp"> <TextView android:id="@+id/tv_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/dimen_14dp" android:text="取消" android:layout_alignParentLeft="true" android:textColor="@color/color_666666"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择时间" android:layout_centerHorizontal="true" android:textSize="@dimen/dimen_18dp" android:textColor="@color/color_333333"/> <TextView android:id="@+id/tv_confirm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/dimen_14dp" android:text="确定" android:layout_alignParentRight="true" android:textColor="#FE6058"/> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:orientation="horizontal" android:gravity="center"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/dimen_14dp" android:text="开始时间" android:textColor="@color/color_666666"/> <TimePicker android:id="@+id/timepicker_start" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" android:timePickerMode="spinner" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="至"/> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center"> <TextView android:textSize="@dimen/dimen_14dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="结束时间" android:textColor="@color/color_666666"/> <TimePicker android:id="@+id/timepicker_end" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ffffff" android:timePickerMode="spinner" /> </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout>
2. JAVA代码:
public void setTimePicker(){ bottomSheetDialog =new BottomSheetDialog(getContext()); View dialogView= LayoutInflater.from(getContext()) .inflate(R.layout.dialog_time_picker,null); TimePicker startTimePicker = dialogView.findViewById(R.id.timepicker_start); TimePicker endTimePicker = dialogView.findViewById(R.id.timepicker_end); TextView tvCancel = dialogView.findViewById(R.id.tv_cancel); TextView tvConfirm = dialogView.findViewById(R.id.tv_confirm); startTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); //设置点击事件不弹键盘 startTimePicker.setIs24HourView(true); //设置时间显示为24小时 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ startTimePicker.setHour(startHour); startTimePicker.setMinute(startMinute); //设置当前分(0-59) } startTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { //获取当前选择的时间 @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { startHour = hourOfDay; startMinute = minute; } }); endTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); //设置点击事件不弹键盘 endTimePicker.setIs24HourView(true); //设置时间显示为24小时 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ endTimePicker.setHour(endHour); endTimePicker.setMinute(endMinute); //设置当前分(0-59) } endTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { //获取当前选择的时间 @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { endHour = hourOfDay; endMinute = minute; } }); tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bottomSheetDialog.dismiss(); } }); tvConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (startHour > endHour || (startHour == endHour && startMinute >= endMinute) ){ ToastUtils.showToast(getContext(),"结束时间小于开始时间,请重新选择!"); return; } Log.e("开始时间:",startHour +":"+startMinute ); Log.e("结束时间:",endHour +":"+endMinute); bottomSheetDialog.dismiss(); } }); bottomSheetDialog.setContentView(dialogView); }
3. 调用方法:
if(bottomSheetDialog != null) bottomSheetDialog.show();