您的位置:首页 > 移动开发 > Android开发

Android中DatePicker控件用法解析

2016-05-29 13:55 381 查看
关于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);
}
});

}
上述代码可以直接拿去用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息