日期选择器 利用NumberPicker
来源:互联网 发布:知春路人流医院哪家好 编辑:程序博客网 时间:2024/05/21 02:20
public class XcyDatePicker extends LinearLayout { private static final int MIN_YEAR = 1900; private int MAX_YEAR = 2016; private static final int MIN_MONTH = 1; private static final int MAX_MONTH = 12; private NumberPicker yearNp; private NumberPicker monthNp; private NumberPicker dayNp; public XcyDatePicker(Context context) { super(context); init(context); } public XcyDatePicker(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public XcyDatePicker(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { LayoutInflater.from(context).inflate(R.layout.xcy_date_picker, this); yearNp = (NumberPicker) findViewById(R.id.year_np); monthNp = (NumberPicker) findViewById(R.id.month_np); dayNp = (NumberPicker) findViewById(R.id.day_np); //初始化显示的日期 默认今天 setNpMinValAndMaxVal(yearNp, MIN_YEAR, MAX_YEAR); setNpMinValAndMaxVal(monthNp, MIN_MONTH, MAX_MONTH); setDisplayValue(new Date()); monthNp.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { dayNp.setMaxValue(getDaysInMonthAndYear(yearNp.getValue(), newVal)); } }); yearNp.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { dayNp.setMaxValue(getDaysInMonthAndYear(newVal, monthNp.getValue())); } }); } /** * 获取某一年某一月的天数 * * @param year * @param month 取值范围1-12 * @return */ private int getDaysInMonthAndYear(int year, int month) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month - 1); return calendar.getActualMaximum(Calendar.DATE); } /** * 根据date来展示当前显示的日期 * * @param date */ public void setDisplayValue(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); yearNp.setValue(calendar.get(Calendar.YEAR)); monthNp.setValue(calendar.get(Calendar.MONTH) + 1); setNpMinValAndMaxVal(dayNp, 1, getDaysInMonthAndYear(yearNp.getValue(), monthNp.getValue())); dayNp.setValue(calendar.get(Calendar.DAY_OF_MONTH)); } /** * 根据具体的年月日展示日期 * * @param year * @param month * @param day */ public void setDisplayValue(int year, int month, int day) { checkNumIsInRange(year, MIN_YEAR, MAX_YEAR, "请输入" + MIN_YEAR + "~~~~" + MAX_YEAR + "之间的年份"); yearNp.setValue(year); checkNumIsInRange(month, MIN_MONTH, MAX_MONTH, "请输入" + MIN_MONTH + "~~~~" + MAX_MONTH + "之间的月份"); monthNp.setValue(month); int maxDays = getDaysInMonthAndYear(yearNp.getValue(), monthNp.getValue()); setNpMinValAndMaxVal(dayNp, 1, maxDays); checkNumIsInRange(day, 1, maxDays , "请输入" + 1 + "到" + maxDays + "之间的天数"); dayNp.setValue(day); } /** * 检查输入的数字是否在范围内 * * @param checkNum * @param minNum * @param maxNum * @param message */ private void checkNumIsInRange(int checkNum, int minNum, int maxNum, String message) { if (checkNum < minNum || checkNum > maxNum) { throw new NumberFormatException(message); } } /** * 获取当前展示的日期 类型为Date * * @return 返回值为Date类型 */ public Date getDisplayDate() { Calendar calendar = Calendar.getInstance(); calendar.set(yearNp.getValue(), monthNp.getValue() - 1, dayNp.getValue()); return calendar.getTime(); } /** * 获取指定格式的日期字符串 * * @param pattern * @return */ public String getDisPlayDateStr(String pattern) { Calendar calendar = Calendar.getInstance(); calendar.set(yearNp.getValue(), monthNp.getValue() - 1, dayNp.getValue()); Date date = calendar.getTime(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); return simpleDateFormat.format(date); } /** * 获取当前展示的年份 * * @return 返回年份 */ public int getDisplayYear() { return yearNp.getValue(); } /** * 获取当前展示的月份 * * @return 返回月份 */ public int getDisplayMonth() { return monthNp.getValue(); } /** * 返回当前展示的某一月的第几天 * * @return 返回月份的第几天 */ public int getDisplayDay() { return dayNp.getValue(); } /** * 设置NumberPicker的取值范围 * * @param np * @param minVal * @param maxVal */ private void setNpMinValAndMaxVal(NumberPicker np, int minVal, int maxVal) { np.setMinValue(minVal); np.setMaxValue(maxVal); }}
xcy_date_picker.xml
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <NumberPicker android:id="@+id/year_np" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"></NumberPicker> <NumberPicker android:id="@+id/month_np" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_weight="1"></NumberPicker> <NumberPicker android:id="@+id/day_np" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_weight="1"></NumberPicker></LinearLayout>
直接粘贴代码了
0 0
- 日期选择器 利用NumberPicker
- 使用Android组件NumberPicker定制日期选择器
- NumberPicker 选择器
- 各种杂项组件(3)之--CalendarView(日历视图)、DatePicker/TimePicker(日期、时间选择器)、NumberPicker(数值选择器)
- NumberPicker自定义时间选择器
- Android数字选择器-NumberPicker
- NumberPicker数值选择器
- Android数字选择器-NumberPicker
- Android数字选择器-NumberPicker
- Android 控件 数值选择器 NumberPicker
- Android的NumberPicker数量选择器
- NumberPicker ——数字选择器
- NumberPicker制作省市选择器/时间选择器
- 安卓NumberPicker数字选择器用法
- UI组件:数值选择器(NumberPicker)
- NumberPicker
- NumberPicker
- NumberPicker
- C#从非第一元素传递实参数组
- Android 三角标签(自定义Textview控件)
- Cassandra Primary Key讲解
- 【JavaService】使用Java编写部署windows服务
- <OJ_Sicily>Travelling Salesman Problem
- 日期选择器 利用NumberPicker
- QT在linux上的发布,写给小白看的,老手略过
- [Qt入门篇]6 Qt的属性系统——READ/WRITE/MEMBER
- Could NOT find OpenMP (missing: OpenMP_CXX_FLAGS)
- Mybatis github 资源记录
- Android动画效果
- RxJava----操作符:cold&hot Observable
- JS用户端设备判断
- cocos2dx lua 动画