本文出自:http://blog.csdn.net/dt235201314/article/details/78678419
一丶效果图
二丶概述
大概是去年的这个时候说要做一个关于时间控件的总结,到这会才开始。在整理demo时,发现直接上代码也无法由浅入深讲解,眨眼就是11月30号了,踩着11月份的尾巴,先来一篇,后面再补充。
三丶看代码
(1).需求分析
1.选择开始时间到结束时间
2.结束时间不能超过今天
3.开始时间不能超过结束时间
4.最早选择2017年1月1日
5.仿iOS(表示很无奈)
(2)看代码
首先是一个Dialog
DoubleTimeSelectDialog.java
public class DoubleTimeSelectDialog extends Dialog implements View.OnClickListener{ private Context mContext; /** * 事件选取完毕监听 */ private OnDateSelectFinished onDateSelectFinished; /** * 开始、结束年份 */ private static int START_YEAR = 1990, END_YEAR = 2100; /** * 最大年龄 */ private final int LARGEST_AGE = 119; /** * 年 */ private WheelView mYearView; /** * 月 */ private WheelView mMonthView; /** * 日 */ private WheelView mDayView; /** * 时 */ private WheelView mHourView; /** * 分 */ private WheelView mMinuteView; /** * list列表(大月份) */ private List<String> mListBig; /** * list列表(小月份) */ private List<String> mListLittle; /* 是否只选择本年 */ private boolean isOnlyThisYear = false; private boolean isShowMinute = false; /* 是否只选择本月 */ private boolean isOnlyThisMonth = false; public static final String YEAR = "year"; public static final String MONTH = "month"; public static final String DAY = "day"; private int year; private int month; private int day; private int hour; private int minute; private int curYear; private int curMonth; private int curDay; /**时间容器*/ private LinearLayout mTimeContainerLl; /**开始时间*/ private TextView mBeginTimeTv; /**结束时间*/ private TextView mEndTimeTv; /**选择的开始时间*/ private String mSelectStartTime; /**选择的结束时间*/ private String mSelectEndTime; /**当前选择时间模式*/ private TIME_TYPE mTimeType = TIME_TYPE.TYPE_START; /**最小时间*/ private String allowedSmallestTime; /**最大时间*/ private String allowedBiggestTime; private enum TIME_TYPE { TYPE_START, TYPE_END } public DoubleTimeSelectDialog(Context context) { super(context, R.style.PopBottomDialogStyle); } public DoubleTimeSelectDialog(Context context, String curTime, String startTime) { super(context, R.style.PopBottomDialogStyle); this.mContext = context; this.allowedSmallestTime = startTime; setContentView(R.layout.popwindow_bottom_layout); setCanceledOnTouchOutside(true); Window mDialogWindow = getWindow(); mDialogWindow.setGravity(Gravity.BOTTOM); WindowManager.LayoutParams lp = mDialogWindow.getAttributes(); lp.y = 0;//设置Dialog距离底部的距离 lp.width = ViewGroup.LayoutParams.MATCH_PARENT; mDialogWindow.setAttributes(lp); initDialogView(); init(curTime, false); String monthS = String.format("%02d", curMonth); String dayS = String.format("%02d", curDay); String yearS = String.format("%02d", curYear); if(!TextUtils.isEmpty(curTime)){ mSelectStartTime = curTime; mBeginTimeTv.setText(makeFormatContent(mContext.getString(R.string.begin_at), curTime.replaceAll("-","."))); mSelectEndTime = curTime; mEndTimeTv.setText(makeFormatContent(mContext.getString(R.string.end_at), curTime.replaceAll("-","."))); }else{ mSelectStartTime = yearS + "-" + monthS + "-" + dayS; mBeginTimeTv.setText(makeFormatContent(mContext.getString(R.string.begin_at), yearS + "." + monthS + "." + dayS)); mSelectEndTime = yearS + "-" + monthS + "-" + dayS; mEndTimeTv.setText(makeFormatContent(mContext.getString(R.string.end_at), yearS + "." + monthS + "." + dayS)); } } public DoubleTimeSelectDialog(Context context, String earliestTime, String startTime, String endTime) { super(context, R.style.PopBottomDialogStyle); this.mContext = context; this.allowedSmallestTime = earliestTime; this.allowedBiggestTime = endTime; setContentView(R.layout.popwindow_bottom_layout); setCanceledOnTouchOutside(true); Window mDialogWindow = getWindow(); mDialogWindow.setGravity(Gravity.BOTTOM); WindowManager.LayoutParams lp = mDialogWindow.getAttributes(); lp.y = 0;//设置Dialog距离底部的距离 lp.width = ViewGroup.LayoutParams.MATCH_PARENT; mDialogWindow.setAttributes(lp); initDialogView(); init(startTime, false); String monthS = String.format("%02d", curMonth); String dayS = String.format("%02d", curDay); String yearS = String.format("%02d", curYear); if(!TextUtils.isEmpty(startTime)){ mSelectStartTime = startTime; mBeginTimeTv.setText(makeFormatContent(mContext.getString(R.string.begin_at), startTime.replaceAll("-","."))); mSelectEndTime = endTime; mEndTimeTv.setText(makeFormatContent(mContext.getString(R.string.end_at), endTime.replaceAll("-","."))); }else{ mSelectStartTime = yearS + "-" + monthS + "-" + dayS; mBeginTimeTv.setText(makeFormatContent(mContext.getString(R.string.begin_at), yearS + "." + monthS + "." + dayS)); mSelectEndTime =