Android中DatePicker控件用法解析

本文详细解析了Android中DatePicker控件的使用,包括如何解决在Android 3.0及以上版本显示过大问题,通过设置CalendarViewShown属性。同时,文章探讨了日期转换时month字段减1的错误,并提供了通过Calender类调整月份的方法。此外,介绍了如何监听DatePicker的变化,实现OnDateChangedListener接口,并处理月份问题的完整代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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);
			}
		});		
		 
}
上述代码可以直接拿去用了。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值