时间选择器之 DateTimePickerDialog

效果图

package com.example.liuqidemo.view;


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


import com.example.vehiclemandcsyh.R;


import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;


public class DateTimePickerDialog {
private DatePicker dp;
private TimePicker tp;
private Context context;
private MyDialog dateDialog;
private TextView picktitle;
private String dateString="";
private EditText editText;
private String formStr="";// 输出格式
private int type;// 操作类型
private int count=1;



public DateTimePickerDialog(Context context){
this.context=context;


}


/**
* 设置日期和时间(无初始化 日期时间参数),typ=1:时间选择;type=2:日期选择;type=3:日期时间选择
* @param editText
*/
public void getDateTimePicker(EditText editText,int type){
this.type=type;
int year, month, day;
this.editText=editText;
Calendar calendar=Calendar.getInstance();
year=calendar.get(Calendar.YEAR);
month=calendar.get(Calendar.MONTH);
day=calendar.get(Calendar.DAY_OF_MONTH);
dateDialog= new MyDialog(context, R.layout.zsg_datetime_pick);
picktitle=(TextView)dateDialog.findViewById(R.id.tv_datetime_pick_title);
dp=(DatePicker)dateDialog.findViewById(R.id.datepicker);
tp=(TimePicker)dateDialog.findViewById(R.id.timepicker);


switch (this.type) {
case 1:
tp.setVisibility(View.VISIBLE);
dp.setVisibility(View.GONE);
picktitle.setText("请选择时间");
formStr="HH:mm";
break;
case 2:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd";
picktitle.setText("请选择日期");
break;


default:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd HH:mm";
picktitle.setText("请选择日期");
break;
}



dp.setCalendarViewShown(false);
dp.init(year, month, day, new DatePicker.OnDateChangedListener() {


public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {

}
});
int a=tp.getCurrentHour()+0;
tp.setIs24HourView(true);
tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
}
});
tp.setCurrentHour(a);

Button btn_sure=(Button)dateDialog.findViewById(R.id.btn_datepicker_sure);
btn_sure.setOnClickListener(sureListener);
Button btn_cancel=(Button)dateDialog.findViewById(R.id.btn_datepicker_cancel);
btn_cancel.setOnClickListener(cancelListener);

}

private OnClickListener sureListener = new OnClickListener() {

@Override
public void onClick(View v) {
Calendar calendar = Calendar.getInstance();
if(type==1 || type==2){

calendar.set(dp.getYear(), dp.getMonth(),
dp.getDayOfMonth(), tp.getCurrentHour(),
tp.getCurrentMinute());
SimpleDateFormat sdf = new SimpleDateFormat(formStr);
dateString= sdf.format(calendar.getTime());
editText.setText(dateString);
Log.i("onTouch", dateString+"--");
dateDialog.cancel();
}else {
if(count<2){
count++;
tp.setVisibility(View.VISIBLE);
dp.setVisibility(View.GONE);
picktitle.setText("请选择时间");
}else{
count=1;
calendar.set(dp.getYear(), dp.getMonth(),
dp.getDayOfMonth(), tp.getCurrentHour(),
tp.getCurrentMinute());
SimpleDateFormat sdf = new SimpleDateFormat(formStr);
dateString= sdf.format(calendar.getTime());
editText.setText(dateString);
Log.i("onTouch", dateString+"--");
dateDialog.cancel();
}



}

}


};
private OnClickListener cancelListener = new OnClickListener() {

@Override
public void onClick(View v) {
dateDialog.cancel();

}
};


/**
* 设置日期和时间(无初始化 日期时间参数),typ=1:时间选择;type=2:日期选择;type=3:日期时间(无秒)选择,type=4 日期时间(含秒)选择
* minDate,maxDate 设置 日期选择范围,值为0则不设置(使用默认)
* @param editText
*/
public void getDateTimePicker(EditText editText,int type,long minDate,long maxDate, final int minHour,final int maxHour){
this.type=type;
int year, month, day;
this.editText=editText;
Calendar calendar=Calendar.getInstance();
year=calendar.get(Calendar.YEAR);
month=calendar.get(Calendar.MONTH);
day=calendar.get(Calendar.DAY_OF_MONTH);
dateDialog= new MyDialog(context, R.layout.zsg_datetime_pick);
picktitle=(TextView)dateDialog.findViewById(R.id.tv_datetime_pick_title);
dp=(DatePicker)dateDialog.findViewById(R.id.datepicker);
tp=(TimePicker)dateDialog.findViewById(R.id.timepicker);


if (minDate!=0) {
dp.setMinDate(minDate);
}
if (maxDate!=0) {
dp.setMaxDate(maxDate);
}




switch (this.type) {
case 1:
tp.setVisibility(View.VISIBLE);
dp.setVisibility(View.GONE);
picktitle.setText("请选择时间");
formStr="HH:mm";
break;
case 2:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd";
picktitle.setText("请选择日期");
break;


case 3:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd HH:mm";
picktitle.setText("请选择日期");
break;
default:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd HH:mm:ss";
picktitle.setText("请选择日期");
}



dp.setCalendarViewShown(false);
dp.init(year, month, day, new DatePicker.OnDateChangedListener() {


public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {

}
});
int a=tp.getCurrentHour()+0;
tp.setIs24HourView(true);
tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

if (hourOfDay>maxHour) {
view.setCurrentHour(maxHour);
}


if (hourOfDay<minHour) {
view.setCurrentHour(minHour);
}


}
});
tp.setCurrentHour(a);

Button btn_sure=(Button)dateDialog.findViewById(R.id.btn_datepicker_sure);
btn_sure.setOnClickListener(sureListener);
Button btn_cancel=(Button)dateDialog.findViewById(R.id.btn_datepicker_cancel);
btn_cancel.setOnClickListener(cancelListener);

}

/**
* 设置日期和时间(有初始化 日期时间参数(从 editText 中获取)),typ=1:时间选择;type=2:日期选择;type=3:日期时间(无秒)选择,type=4 日期时间(含秒)选择
* minDate,maxDate 设置 日期选择范围,值为0则不设置(使用默认); strForm: 时间格式
* @param editText
*/
public void getDateTimePicker(EditText editText,int type,long minDate,long maxDate, final int minHour,final int maxHour , boolean isDefault){
this.type=type;
int year, month, day;
this.editText=editText;
Calendar calendar=Calendar.getInstance();
year=calendar.get(Calendar.YEAR);
month=calendar.get(Calendar.MONTH);
day=calendar.get(Calendar.DAY_OF_MONTH);
dateDialog= new MyDialog(context, R.layout.zsg_datetime_pick);
picktitle=(TextView)dateDialog.findViewById(R.id.tv_datetime_pick_title);
dp=(DatePicker)dateDialog.findViewById(R.id.datepicker);
tp=(TimePicker)dateDialog.findViewById(R.id.timepicker);


if (minDate!=0) {
dp.setMinDate(minDate);
}
if (maxDate!=0) {
dp.setMaxDate(maxDate);
}




switch (this.type) {
case 1:
tp.setVisibility(View.VISIBLE);
dp.setVisibility(View.GONE);
picktitle.setText("请选择时间");
formStr="HH:mm";
break;
case 2:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd";
picktitle.setText("请选择日期");
break;


case 3:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd HH:mm";
picktitle.setText("请选择日期");
break;
default:
tp.setVisibility(View.GONE);
dp.setVisibility(View.VISIBLE);
formStr="yyyy-MM-dd HH:mm:ss";
picktitle.setText("请选择日期");
}

if (isDefault) {
DateFormat df = new SimpleDateFormat(formStr);
try {
Date d = df.parse(editText.getText().toString());
calendar.setTime(d);
year=calendar.get(Calendar.YEAR);
month=calendar.get(Calendar.MONTH);
day=calendar.get(Calendar.DAY_OF_MONTH);

} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}

dp.setCalendarViewShown(false);
dp.init(year, month, day, new DatePicker.OnDateChangedListener() {


public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {

}
});
int a=tp.getCurrentHour()+0;
tp.setIs24HourView(true);
tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

if (hourOfDay>maxHour) {
view.setCurrentHour(maxHour);
}


if (hourOfDay<minHour) {
view.setCurrentHour(minHour);
}


}
});
tp.setCurrentHour(a);
if (isDefault) {
tp.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
tp.setCurrentMinute(calendar.get(Calendar.MINUTE));
}

Log.i("onTouch", calendar.get(Calendar.HOUR_OF_DAY)+"--"+calendar.get(Calendar.MINUTE)+"~"+ calendar.get(Calendar.SECOND));
Button btn_sure=(Button)dateDialog.findViewById(R.id.btn_datepicker_sure);
btn_sure.setOnClickListener(sureListener);
Button btn_cancel=(Button)dateDialog.findViewById(R.id.btn_datepicker_cancel);
btn_cancel.setOnClickListener(cancelListener);

}

}
通过这个例子我们主要是学习Android中DatePickerDialog日期选择器组件、TimePickerDialog时间选择组件的用法,里面给出了两个演示,单击对应的按钮可演示具体效果。DatePickerDialog组件、TimePickerDialog组件的具体用法写入了两个按钮监听事件中,以下是部分代码段:   case DATE_DIALOG://生成日期对话框的代码    c=Calendar.getInstance();//获取日期对象    dialog=new DatePickerDialog(//创建DatePickerDialog对象    this,    new DatePickerDialog.OnDateSetListener(){//创建OnDateSetListener监听器   @Override   public void onDateSet(DatePicker dp, int year, int month,int dayOfMonth) {    EditText et = (EditText)findViewById(R.id.et);    et.setText("您选择了:" year "年" month "月" dayOfMonth "日");   }   },   c.get(Calendar.YEAR),//传入年份   c.get(Calendar.MONTH), //传入月份   c.get(Calendar.DAY_OF_MONTH) //传入天数   case TIME_DIALOG://生成时间对话框的代码   c=Calendar.getInstance();//获取日期对象   dialog=new TimePickerDialog(//创建TimePickerDialog对象   this,   new TimePickerDialog.OnTimeSetListener(){ //创建OnTimeSetListener监听器   @Override   public void onTimeSet(TimePicker tp, int hourOfDay, int minute) {    EditText et = (EditText)findViewById(R.id.et);    et.setText("您选择了:" hourOfDay "时" minute "分");//设置EditText控件的属性   }   },   c.get(Calendar.HOUR_OF_DAY),//传入当前小时数   c.get(Calendar.MINUTE), //传入当前分钟数   false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值