1、DatePicker的使用 |
1、 在布局文件中声明一个DatePicker控件时,切换到视图模式时看不到效果,需要通过程序控制对其进行初始化。
1 <DatePicker -->声明DatePicker控件 2 android:id="@+id/dp_showdate" -->设置控件id 3 android:layout_width="match_parent" -->设置控件宽度为父容器宽度 4 android:layout_height="wrap_content"/> -->设置控件高度为父容器高度
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); //调用父类方法 4 super.setContentView(R.layout.datepicker_layout);//设置布局管理器 5 /* year:表示要设置的年份 6 * monthOfYear:表示要设置的一年中的某月 7 * dayOfMonth:表示要设置的一个月中的某天 8 * onDateChangedListener:表示要设置的时间改变的监听器,当时间改变时触发该事件 9 */ 10 dp_showdate.init(year, monthOfYear, dayOfMonth, onDateChangedListener); 11 }
2、要对以上:year、monthOfYear、dayOfMonth进行初始化,可以使用java中提供的Calendar类方便的获得。
1 //使用Calendar类提供的日期方法,获得相应的年月日 2 Calendar calendar = Calendar.getInstance(); //通过Calendar类提供的静态方法:类名.方法()获得Calendar实例 3 int year = calendar.get(Calendar.YEAR); //设置年份
4 int monthOfYear = calendar.get(Calendar.YEAR); //设置一年中的某月 5 int dayOfMonth = calendar.get(Calendar.YEAR); //设置一月中的某天
3、然后再设置日期改变监听:
1 dp_showdate.init(year, monthOfYear, dayOfMonth, new OnDateChangedListener(){ 2 @Override 3 public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) { 4 //什么都没做 5 } 6 });
运行效果:
1.1为DatePicker添加日期改变监听 |
在布局文件中添加一个TextView,用于显示日期:
1 <TextView -->定义一个TextView控件 2 android:id="@+id/tv_showdate" -->设置控件id 3 android:layout_width="match_parent" -->设置控件宽度 4 android:layout_height="wrap_content"/> -->设置控件高度
在监听方法中初始化年月日:
1 DatePickerDemoActivity.this.year = year; //选择后的年份 2 DatePickerDemoActivity.this.monthOfYear = monthOfYear; //选择后的月份 3 DatePickerDemoActivity.this.dayOfMonth = dayOfMonth; //选择后的天
定义一个方法,用于显示信息:
1 /* 2 * 该方法用于显示信息 3 */ 4 public void showInfo(int year,int monthOfYear,int dayOfMonth){ 5 String info =year+"年"+monthOfYear+"月"+dayOfMonth+"日"; 6 tv_showdate.setText(info);//把输出的信息放到TextView中 7 }
运行效果:
完整代码:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout -->定义线性布局管理器 3 xmlns:android="http://schemas.android.com/apk/res/android" -->命名控件 4 android:layout_width="match_parent" -->设置管理器宽度为屏幕宽度 5 android:layout_height="match_parent" -->设置管理器高度为屏幕高度 6 android:orientation="vertical" > -->设置管理器中的内容为垂直摆放 7 <TextView -->定义组件 8 android:id="@+id/tv_showdate" -->为组件设置id 9 android:layout_width="match_parent" -->设置组件宽度为父容器宽度 10 android:layout_height="wrap_content"/> -->设置组件高度 11 <DatePicker -->定义组件 12 android:id="@+id/dp_showdate" -->设置组件id 13 android:layout_width="match_parent" -->设置组件宽度为父容器宽度 14 android:layout_height="wrap_content"/> -->设置组件高度为包裹内容高度 15 </LinearLayout>
DatePickerDemoActivity类:
1 package com.example.basiccomponent2; 2 3 import java.util.Calendar; 4 5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.widget.DatePicker; 8 import android.widget.DatePicker.OnDateChangedListener; 9 import android.widget.TextView; 10 11 public class DatePickerDemoActivity extends Activity { 12 private TextView tv_showdate = null; //声明TextView对象 13 private DatePicker dp_showdate = null; //声明DatePicker对象 14 //使用Calendar类提供的日期方法,获得相应的年月日 15 Calendar calendar = Calendar.getInstance(); 16 int year = calendar.get(Calendar.YEAR); 17 int monthOfYear = calendar.get(Calendar.YEAR); 18 int dayOfMonth = calendar.get(Calendar.YEAR); 19 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 super.setContentView(R.layout.datepicker_layout);//设置布局管理器 24 //初始化view 25 dp_showdate = (DatePicker)super.findViewById(R.id.dp_showdate); 26 tv_showdate = (TextView)super.findViewById(R.id.tv_showdate); 27 /* year:表示要设置的年份 28 * monthOfYear:表示要设置的一年中的某月 29 * dayOfMonth:表示要设置的一个月中的某天 30 * onDateChangedListener:表示要设置的时间改变的监听器 31 */ 32 dp_showdate.init(year, monthOfYear, dayOfMonth, new OnDateChangedListener(){ 33 @Override 34 public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) { 35 DatePickerDemoActivity.this.year = year; //选择后的年份 36 DatePickerDemoActivity.this.monthOfYear = monthOfYear; //选择后的月份 37 DatePickerDemoActivity.this.dayOfMonth = dayOfMonth; //选择后的天 38 DatePickerDemoActivity.this.showInfo(year, monthOfYear,dayOfMonth);//调用显示信息方法 39 } 40 }); 41 } 42 /* 43 * 该方法用于显示信息 44 */ 45 public void showInfo(int year,int monthOfYear,int dayOfMonth){ 46 String info =year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日"; 47 tv_showdate.setText(info);//把输出的信息放到TextView中 48 } 49 50 }
修改显示日期效果,为小于10的数字添加0:
1 public void showInfo(int year, int monthOfYear, int dayOfMonth) { 2 String info = year + "年" + addZero(monthOfYear+1) + "月" + addZero(dayOfMonth) + "日"; 3 tv_showdate.setText(info);// 把输出的信息放到TextView中 4 } 5 public String addZero(int num){ 6 String str = null; 7 if(num<10){ 8 str = "0"+num; 9 }else{ 10 str = ""+num; 11 } 12 return str; 13 }
2、TimePicker的使用 |
TimePicker的使用和DatePicker类似,但是不用给其初始化,在布局文件中添加一个TimePicker组件:
1 <TimePicker 2 android:id="@+id/tp_showtime" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content"/>
在Activity类中,完整代码:
1 package com.example.basiccomponent2; 2 3 import java.util.Calendar; 4 5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.widget.DatePicker; 8 import android.widget.DatePicker.OnDateChangedListener; 9 import android.widget.TextView; 10 import android.widget.TimePicker; 11 import android.widget.TimePicker.OnTimeChangedListener; 12 13 public class DatePickerDemoActivity extends Activity { 14 private TextView tv_showdate = null; // 15 private DatePicker dp_showdate = null; // 16 private TimePicker tp_showtime = null; 17 // 使用Calendar类提供的日期方法,获得相应的年月日 18 Calendar calendar = Calendar.getInstance(); 19 int year = calendar.get(Calendar.YEAR); 20 int monthOfYear = calendar.get(Calendar.YEAR); 21 int dayOfMonth = calendar.get(Calendar.YEAR); 22 23 int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); 24 int minute = calendar.get(Calendar.MINUTE); 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 super.setContentView(R.layout.datepicker_layout);// 设置布局管理器 29 // 初始化view 30 dp_showdate = (DatePicker) super.findViewById(R.id.dp_showdate); 31 tv_showdate = (TextView) super.findViewById(R.id.tv_showdate); 32 tp_showtime = (TimePicker)super.findViewById(R.id.tp_showtime); 33 /* 34 * year:表示要设置的年份 monthOfYear:表示要设置的一年中的某月 dayOfMonth:表示要设置的一个月中的某天 35 * onDateChangedListener:表示要设置的时间改变的监听器 36 */ 37 dp_showdate.init(year, monthOfYear, dayOfMonth,new OnDateChangedListener() { 38 @Override 39 public void onDateChanged(DatePicker view, int year,int monthOfYear, int dayOfMonth) { 40 DatePickerDemoActivity.this.year = year; // 选择后的年份 41 DatePickerDemoActivity.this.monthOfYear = monthOfYear; // 选择后的月份 42 DatePickerDemoActivity.this.dayOfMonth = dayOfMonth; // 选择后的天 43 DatePickerDemoActivity.this.showInfo(year, monthOfYear,dayOfMonth,hourOfDay,minute);// 调用显示信息方法 44 } 45 }); 46 //设置时间事件 47 tp_showtime.setOnTimeChangedListener(new OnTimeChangedListener(){ 48 @Override 49 public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 50 DatePickerDemoActivity.this.hourOfDay = hourOfDay; 51 DatePickerDemoActivity.this.minute = minute; 52 DatePickerDemoActivity.this.showInfo(year, monthOfYear,dayOfMonth,hourOfDay,minute);// 调用显示信息方法 53 } 54 }); 55 } 56 57 /* 58 * 该方法用于显示信息 59 */ 60 public void showInfo(int year, int monthOfYear, int dayOfMonth,int hourOfDay,int minute) { 61 String info = year + "年" + addZero(monthOfYear+1) 62 + "月" + addZero(dayOfMonth) 63 + "日" + addZero(hourOfDay) 64 + "时" + addZero(minute) 65 + "分"; 66 tv_showdate.setText(info);// 把输出的信息放到TextView中 67 } 68 public String addZero(int num){ 69 String str = null; 70 if(num<10){ 71 str = "0"+num; 72 }else{ 73 str = ""+num; 74 } 75 return str; 76 } 77 78 }