Android中DatePicker控件用法解析
2016-05-29 13:55
381 查看
关于DatePicker这个控件的解析有以下几点:
1、首先是显示问题,在Android 3.0系统以后使用DatePicker控件会出现一堆和日期相关的界面,比如下图:
有没有发现,如果使用了这个控件,会占据你一整个页面,这个页面上别的控件都别想放了。如果我只想简单的显示年月日怎么办,非得用DatePickerDialog吗?那倒不必,有解决的办法,就是判断当前使用的SDK编译版本,如果在3.0及其以上就将CalendarViewShown设置为false,否则保持该属性为true,具体的实现方法如下:
2、其次是需要解决这个控件到日期文本的时间转换。当我们监听该控件的变化时,在控件的界面上显示的时间是对的,而当把这个时间显示到例如textview上就会出现问题,仔细看会发现其中的month会比当前的月份少1,甚至会出现0月的情况,查看DatePicker的源码会发现,源码中利用Calender类获得年月日,而Calender这个类计数月份的时候本来就是0-11之间的月份,如果要显示正确的月份,程序员需要手动调用calender.add(Calendar.MONTH,
1);方法。
3、怎么监听DatePicker控件的变化,实现new OnDateChangedListener()接口就可以实现了,其重载onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) 方法的时候也会有月份少1的问题。接下来我会贴上完整的从DatePicker控件初始化到监听日期变化后获取正确日期的代码:
1、首先是显示问题,在Android 3.0系统以后使用DatePicker控件会出现一堆和日期相关的界面,比如下图:
有没有发现,如果使用了这个控件,会占据你一整个页面,这个页面上别的控件都别想放了。如果我只想简单的显示年月日怎么办,非得用DatePickerDialog吗?那倒不必,有解决的办法,就是判断当前使用的SDK编译版本,如果在3.0及其以上就将CalendarViewShown设置为false,否则保持该属性为true,具体的实现方法如下:
DatePicker dp1; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { dp1.setCalendarViewShown(false); } else { dp1.setCalendarViewShown(true); } }
2、其次是需要解决这个控件到日期文本的时间转换。当我们监听该控件的变化时,在控件的界面上显示的时间是对的,而当把这个时间显示到例如textview上就会出现问题,仔细看会发现其中的month会比当前的月份少1,甚至会出现0月的情况,查看DatePicker的源码会发现,源码中利用Calender类获得年月日,而Calender这个类计数月份的时候本来就是0-11之间的月份,如果要显示正确的月份,程序员需要手动调用calender.add(Calendar.MONTH,
1);方法。
3、怎么监听DatePicker控件的变化,实现new OnDateChangedListener()接口就可以实现了,其重载onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) 方法的时候也会有月份少1的问题。接下来我会贴上完整的从DatePicker控件初始化到监听日期变化后获取正确日期的代码:
private void initData() { Calendar c =Calendar.getInstance(); year1 = c.get(Calendar.YEAR); c.add(Calendar.MONTH, 1); month1 = c.get(Calendar.MONTH); day1 = c.get(Calendar.DAY_OF_MONTH); tv1.setText(year1+"-"+month1+"-"+day1); dp1.init(dp1.getYear(), dp1.getMonth(), dp1.getDayOfMonth(), new OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // TODO Auto-generated method stub year1 = year; month1 = monthOfYear+1; day1 = dayOfMonth; StringBuffer lend_time = new StringBuffer(); lend_time.append(year1); lend_time.append("-"); lend_time.append(month1); lend_time.append("-"); lend_time.append(day1); tv1.setText(lend_time); } }); }上述代码可以直接拿去用了。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories