Android DatePicker

分享到:

DatePicker控件给用户呈现一个日期选择界面,用户通过DatePicker可获取年、月、日,也可以把指定的日期设置到DatePicker上面。和它相似的控件是TimePicker,下面通过实例来了解DatePicker控件的具体使用方法。

本例实现一个DatePicker并且通过Toast显示获取到的日期,效果图如下:

DatePicker实例
DatePicker实例

XML布局代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

         <DatePicker
          android:id="@+id/datePicker1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true"
          android:layout_centerHorizontal="true"
          android:calendarViewShown="false" />
         <Button
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_below="@+id/datePicker1"
          android:layout_centerHorizontal="true"
          android:text="获取日期" />

</RelativeLayout>

有个重要的XML属性提一下:android:calendarViewShown="false" ,如果不在DatePicker上设置这个属性,将会出现一个完整的日历而实际上这种样式几乎用不到。如下图所示:

DatePicker实例

java源码如下:

package com.my.androidtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Toast;

public class DatePickerActivity extends Activity {
          DatePicker datePicker=null;
          Button button=null;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_date_picker);
  
          datePicker=(DatePicker)this.findViewById(R.id.datePicker1);
          button=(Button)this.findViewById(R.id.button1);
          button.setOnClickListener(new OnClickListener(){
          @Override
          public void onClick(View arg0) {
          String yearStr=String.valueOf(datePicker.getYear());
          String monthStr=String.valueOf(datePicker.getMonth()+1);
          String dayStr=String.valueOf(datePicker.getDayOfMonth());
          Toast.makeText(DatePickerActivity.this, "日期是:"+yearStr+"年"+monthStr+"月"+dayStr+"日", Toast.LENGTH_LONG).show();
          }
          });
          }
}

通过这个例子演示了如何从DatePicker控件上获取日期,主要用到3个方法:
getYear(),返回DatePicker对应的"年"
getMonth(),返回DatePicker对应的"月",要注意这个方法返回值的范围是0-11,需要自己在上面加1才能得到正确的月份,像这样getMonth()+1
getDayOfMonth(),返回DatePicker对应的"日"
以上3个方法的返回值都是int类型


通过上面的例子我们已经知道如何获取DatePicker控件的日期,那么问题又来了如果想让DatePicker控件默认显示我们自定义的日期又该怎么办呢?我们通过一个例子来说明给DatePicker控件设置日期的具体方法。

我们直接得用上个例子做些修改,XML布局不变,在java源码中加入以下代码:

datePicker.init(2014, 9, 12, null);

此行代码加在datePicker=(DatePicker)this.findViewById(R.id.datePicker1)的下面即可
执行后代码后会发现,月份并不是9而是10,这是因为系统会自动在月份上加1,如下图所示:

DatePicker实例

init这个方法就是用来初始化DatePicker控件的,下面我们来分析一下这个方法:
先看下此方法的参数格式,init(year, monthOfYear, dayOfMonth, OnDateChangedListener)
前3个参数分别是int类型的"年"、"月"、"日" ,刚才加入的那行代码仅仅设置了"年月日"并没有用到第4个参数而是直接写了"null"
现在重点介绍第4个参数,OnDateChangedListener是日期发生变化的监听事件,实现监需要覆写内部的onDateChanged方法,然后在onDateChanged内部实现自己的代码,onDateChanged方法后3个参数分别对应"年,月,日"可以直接拿来用,例如可以构造了一个Toast来体现监听事件所扑获到的时间变化。下面我们来看监听事件的具体实现方法,在java源码中把之前添加的datePicker.init(2014, 9, 12, null)这行替换成以下代码即可:

datePicker.init(2014, 9, 12,new OnDateChangedListener(){
	@Override
	public void onDateChanged(DatePicker view, int year, int month, int day) {
	Toast.makeText(DatePickerActivity.this, "日期是:"+year+"年"+(month+1)+"月"+day+"日", Toast.LENGTH_SHORT).show();
	}
});

以上代码实现了DatePicker控件的日期初始化和监听事件,如果在运行过程中想仅仅想改变DatePicker上的日期是不需要再次初始化的,系统提供了另外一个方法,代码如下:

datePicker.updateDate (2014, 9, 12);

如果仅仅是更新dataPicker上的日期,用上面这行代码就足够了。参数都是int类型分别对应"年、月、日"


总结:通过以上两个小例子分别介绍了获取DatePicker控件日期的方法,以及如何给DatePicker初始化日期,并实现了监听日期变化的OnDateChangedListener事件。最后把用到的方法做如下整理:

public int getYear () 获取年份
public int getMonth () 获取月份(注意:返回数值为0-11,需要自己+1来显示正确的月份)
public int getDayOfMonth () 获取天数
public void init (int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener) 设置DatePicker控件的初始化日期和相关事件
参数:
year 表示年, monthOfYear表示月,dayOfMonth表示日
OnDateChangedListener 用来监听日期发生变化的事件,需要覆写内部的onDateChanged方法
public void updateDate (int year, int monthOfYear, int dayOfMonth) 更新DatePicker的日期,参数分别对应“年、月、日”
昵    称:
验证码:

相关文档:

Android控件
Android基础知识
Android组件
Android实例