自定义日期和时间选择组合控件

组合控件的代码如下:

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);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值