组合控件的代码如下:
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TimePicker;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* 日期时间选择控件
*
*/
public class DateTimePickerDialog implements DatePicker.OnDateChangedListener, TimePicker.OnTimeChangedListener {
private DatePicker datePicker;
private TimePicker timePicker;
private AlertDialog ad;
private String dateTime;
private String initDateTime;
private Activity activity;
/**
* 日期时间弹出选择框构
*
* @param activity:调用的父activity
*/
public DateTimePickerDialog(Activity activity) {
this.activity = activity;
}
public void init(DatePicker datePicker, TimePicker timePicker) {
Calendar calendar = Calendar.getInstance();
initDateTime = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" +
calendar.get(Calendar.DAY_OF_MONTH) + " " +
calendar.get(Calendar.HOUR_OF_DAY) + ":" +
calendar.get(Calendar.MINUTE) +
calendar.get(Calendar.SECOND);
datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this);
timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
}
/**
* 弹出日期时间选择框
*
* @param dateTimeTextEdite 需要设置的日期时间文本编辑框
* @param type: 0为日期时间类型:yyyy-MM-dd HH:mm:ss
* 1为日期类型:yyyy-MM-dd
* 2为时间类型:HH:mm:ss
* @return
*/
public AlertDialog dateTimePicKDialog(final EditText dateTimeTextEdite, int type) {
Calendar c = Calendar.getInstance();
switch (type) {
case 1:
new DatePickerDialog(activity,
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker datePicker, int year, int monthOfYear,
int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(datePicker.getYear(), datePicker.getMonth(),
datePicker.getDayOfMonth());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
dateTime = sdf.format(calendar.getTime());
dateTimeTextEdite.setText(dateTime);
}
},
c.get(Calendar.YEAR),
c.get(Calendar.MONTH),
c.get(Calendar.DATE)).show();
return null;
case 2:
new TimePickerDialog(activity,
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, Calendar.MONTH,
Calendar.DAY_OF_MONTH, timePicker.getCurrentHour(),
timePicker.getCurrentMinute());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
dateTime = sdf.format(calendar.getTime());
dateTimeTextEdite.setText(dateTime);
}
},
c.get(Calendar.HOUR_OF_DAY),
c.get(Calendar.MINUTE),
true).show();
return null;
default:
LinearLayout dateTimeLayout = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.datetime, null);
datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
init(datePicker, timePicker);
timePicker.setIs24HourView(true);
timePicker.setOnTimeChangedListener(this);
ad = new AlertDialog.Builder(activity).setTitle(initDateTime).setView(dateTimeLayout).setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
dateTimeTextEdite.setText(dateTime);
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
}).show();
onDateChanged(null, 0, 0, 0);
return ad;
}
}
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
onDateChanged(null, 0, 0, 0);
}
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(datePicker.getYear(), datePicker.getMonth(),
datePicker.getDayOfMonth(), timePicker.getCurrentHour(),
timePicker.getCurrentMinute());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateTime = sdf.format(calendar.getTime());
ad.setTitle(dateTime);
}
}
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<DatePicker
android:id="@+id/datepicker"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"/>
<TimePicker
android:id="@+id/timepicker"
android:layout_marginTop="5dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"/>
</LinearLayout>
使用例子:
private DateTimePickerDialog dlg;
dlg = new DateTimePickerDialog(this);
//note_new_time是EditText控件
dlg.dateTimePicKDialog(note_new_time, 0);