Android Date Time picker in one dialog

后端 未结 9 1190
抹茶落季
抹茶落季 2021-02-07 01:31

I am using material Date Time picker for my Android app. But I want to combine the Date and Time picker in one dialog.

<
相关标签:
9条回答
  • 2021-02-07 01:58

    You can call TimePicker after DatePicker set Date. Like this..

        String date_time = "";
        int mYear;
        int mMonth;
        int mDay;
    
        int mHour;
        int mMinute;
    
        et_show_date_time = (EditText) findViewById(R.id.et_show_date_time);
        btn_set_date_time = (Button) findViewById(R.id.btn_set_date_time);
    
        btn_set_date_time.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                datePicker();
    
            }
        });
    

    Date Picker:

        private void datePicker(){
    
        // Get Current Date
        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);
    
        DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                new DatePickerDialog.OnDateSetListener() {
    
                    @Override
                    public void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {
    
                        date_time = dayOfMonth + "-" + (monthOfYear + 1) + "-" + year;
                       //*************Call Time Picker Here ********************
                       tiemPicker();
                    }
                }, mYear, mMonth, mDay);
           datePickerDialog.show();
        }
    

    Time Picker

     private void tiemPicker(){
        // Get Current Time
        final Calendar c = Calendar.getInstance();
        mHour = c.get(Calendar.HOUR_OF_DAY);
        mMinute = c.get(Calendar.MINUTE);
    
        // Launch Time Picker Dialog
        TimePickerDialog timePickerDialog = new TimePickerDialog(this,
                new TimePickerDialog.OnTimeSetListener() {
    
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay,int minute) {
    
                        mHour = hourOfDay;
                        mMinute = minute;
    
                        et_show_date_time.setText(date_time+" "+hourOfDay + ":" + minute);
                    }
                }, mHour, mMinute, false);
        timePickerDialog.show();
    }
    

    --

    0 讨论(0)
  • 2021-02-07 01:59

    Try this code :

    CustomDateTimePicker.java

    import android.app.Activity;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.view.Gravity;
    import android.view.View;
    import android.view.Window;
    import android.widget.Button;
    import android.widget.DatePicker;
    import android.widget.FrameLayout;
    import android.widget.LinearLayout;
    import android.widget.TimePicker;
    import android.widget.ViewSwitcher;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    /**
     * Created by admin on 6/29/2016.
     */
    public class CustomDateTimePicker implements View.OnClickListener {
        private DatePicker datePicker;
        private TimePicker timePicker;
        private ViewSwitcher viewSwitcher;
    
        private final int SET_DATE = 100, SET_TIME = 101, SET = 102, CANCEL = 103;
    
        private Button btn_setDate, btn_setTime, btn_set, btn_cancel;
    
        private Calendar calendar_date = null;
    
        private Activity activity;
    
        private ICustomDateTimeListener iCustomDateTimeListener = null;
    
        private Dialog dialog;
    
        private boolean is24HourView = true, isAutoDismiss = true;
    
        private int selectedHour, selectedMinute;
    
        public CustomDateTimePicker(Activity a,
                                    ICustomDateTimeListener customDateTimeListener) {
            activity = a;
            iCustomDateTimeListener = customDateTimeListener;
    
            dialog = new Dialog(activity);
            dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                    resetData();
                }
            });
    
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            View dialogView = getDateTimePickerLayout();
            dialog.setContentView(dialogView);
        }
    
        public View getDateTimePickerLayout() {
            LinearLayout.LayoutParams linear_match_wrap = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            LinearLayout.LayoutParams linear_wrap_wrap = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            FrameLayout.LayoutParams frame_match_wrap = new FrameLayout.LayoutParams(
                    FrameLayout.LayoutParams.MATCH_PARENT,
                    FrameLayout.LayoutParams.WRAP_CONTENT);
    
            LinearLayout.LayoutParams button_params = new LinearLayout.LayoutParams(
                    0, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
    
            LinearLayout linear_main = new LinearLayout(activity);
            linear_main.setLayoutParams(linear_match_wrap);
            linear_main.setOrientation(LinearLayout.VERTICAL);
            linear_main.setGravity(Gravity.CENTER);
    
            LinearLayout linear_child = new LinearLayout(activity);
            linear_child.setLayoutParams(linear_wrap_wrap);
            linear_child.setOrientation(LinearLayout.VERTICAL);
    
            LinearLayout linear_top = new LinearLayout(activity);
            linear_top.setLayoutParams(linear_match_wrap);
    
            btn_setDate = new Button(activity);
            btn_setDate.setLayoutParams(button_params);
            btn_setDate.setText("Set Date");
            btn_setDate.setId(SET_DATE);
            btn_setDate.setOnClickListener(this);
    
            btn_setTime = new Button(activity);
            btn_setTime.setLayoutParams(button_params);
            btn_setTime.setText("Set Time");
            btn_setTime.setId(SET_TIME);
            btn_setTime.setOnClickListener(this);
    
            linear_top.addView(btn_setDate);
            linear_top.addView(btn_setTime);
    
            viewSwitcher = new ViewSwitcher(activity);
            viewSwitcher.setLayoutParams(frame_match_wrap);
    
            datePicker = new DatePicker(activity);
            timePicker = new TimePicker(activity);
            timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
                @Override
                public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                    selectedHour = hourOfDay;
                    selectedMinute = minute;
                }
            });
    
            viewSwitcher.addView(timePicker);
            viewSwitcher.addView(datePicker);
    
            LinearLayout linear_bottom = new LinearLayout(activity);
            linear_match_wrap.topMargin = 8;
            linear_bottom.setLayoutParams(linear_match_wrap);
    
            btn_set = new Button(activity);
            btn_set.setLayoutParams(button_params);
            btn_set.setText("Set");
            btn_set.setId(SET);
            btn_set.setOnClickListener(this);
    
            btn_cancel = new Button(activity);
            btn_cancel.setLayoutParams(button_params);
            btn_cancel.setText("Cancel");
            btn_cancel.setId(CANCEL);
            btn_cancel.setOnClickListener(this);
    
            linear_bottom.addView(btn_set);
            linear_bottom.addView(btn_cancel);
    
            linear_child.addView(linear_top);
            linear_child.addView(viewSwitcher);
            linear_child.addView(linear_bottom);
    
            linear_main.addView(linear_child);
    
            return linear_main;
        }
    
        public void showDialog() {
            if (!dialog.isShowing()) {
                if (calendar_date == null)
                    calendar_date = Calendar.getInstance();
    
                selectedHour = calendar_date.get(Calendar.HOUR_OF_DAY);
                selectedMinute = calendar_date.get(Calendar.MINUTE);
    
                timePicker.setIs24HourView(is24HourView);
                timePicker.setCurrentHour(selectedHour);
                timePicker.setCurrentMinute(selectedMinute);
    
                datePicker.updateDate(calendar_date.get(Calendar.YEAR),
                        calendar_date.get(Calendar.MONTH),
                        calendar_date.get(Calendar.DATE));
    
                dialog.show();
    
                btn_setDate.performClick();
            }
        }
    
        public void setAutoDismiss(boolean isAutoDismiss) {
            this.isAutoDismiss = isAutoDismiss;
        }
    
        public void dismissDialog() {
            if (!dialog.isShowing())
                dialog.dismiss();
        }
    
        public void setDate(Calendar calendar) {
            if (calendar != null)
                calendar_date = calendar;
        }
    
        public void setDate(Date date) {
            if (date != null) {
                calendar_date = Calendar.getInstance();
                calendar_date.setTime(date);
            }
        }
    
        public void setDate(int year, int month, int day) {
            if (month < 12 && month >= 0 && day < 32 && day >= 0 && year > 100
                    && year < 3000) {
                calendar_date = Calendar.getInstance();
                calendar_date.set(year, month, day);
            }
    
        }
    
        public void setTimeIn24HourFormat(int hourIn24Format, int minute) {
            if (hourIn24Format < 24 && hourIn24Format >= 0 && minute >= 0
                    && minute < 60) {
                if (calendar_date == null)
                    calendar_date = Calendar.getInstance();
    
                calendar_date.set(calendar_date.get(Calendar.YEAR),
                        calendar_date.get(Calendar.MONTH),
                        calendar_date.get(Calendar.DAY_OF_MONTH), hourIn24Format,
                        minute);
    
                is24HourView = true;
            }
        }
    
        public void setTimeIn12HourFormat(int hourIn12Format, int minute,
                                          boolean isAM) {
            if (hourIn12Format < 13 && hourIn12Format > 0 && minute >= 0
                    && minute < 60) {
                if (hourIn12Format == 12)
                    hourIn12Format = 0;
    
                int hourIn24Format = hourIn12Format;
    
                if (!isAM)
                    hourIn24Format += 12;
    
                if (calendar_date == null)
                    calendar_date = Calendar.getInstance();
    
                calendar_date.set(calendar_date.get(Calendar.YEAR),
                        calendar_date.get(Calendar.MONTH),
                        calendar_date.get(Calendar.DAY_OF_MONTH), hourIn24Format,
                        minute);
    
                is24HourView = false;
            }
        }
    
        public void set24HourFormat(boolean is24HourFormat) {
            is24HourView = is24HourFormat;
        }
    
        public interface ICustomDateTimeListener {
            public void onSet(Dialog dialog, Calendar calendarSelected,
                              Date dateSelected, int year, String monthFullName,
                              String monthShortName, int monthNumber, int day,
                              String weekDayFullName, String weekDayShortName, int hour24,
                              int hour12, int min, int sec, String AM_PM);
    
            public void onCancel();
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case SET_DATE:
                btn_setTime.setEnabled(true);
                btn_setDate.setEnabled(false);
    
                if (viewSwitcher.getCurrentView() != datePicker) {
                    viewSwitcher.showPrevious();
                }
                break;
    
            case SET_TIME:
                btn_setTime.setEnabled(false);
                btn_setDate.setEnabled(true);
                if (viewSwitcher.getCurrentView() == datePicker) {
                    viewSwitcher.showNext();
                }
                break;
    
    
                case SET:
                    if (iCustomDateTimeListener != null) {
                        int month = datePicker.getMonth();
                        int year = datePicker.getYear();
                        int day = datePicker.getDayOfMonth();
    
    
                        calendar_date.set(year, month, day, selectedHour,
                                selectedMinute);
    
                        iCustomDateTimeListener.onSet(dialog, calendar_date,
                                calendar_date.getTime(), calendar_date
                                        .get(Calendar.YEAR),
                                getMonthFullName(calendar_date.get(Calendar.MONTH)),
                                getMonthShortName(calendar_date.get(Calendar.MONTH)),
                                calendar_date.get(Calendar.MONTH), calendar_date
                                        .get(Calendar.DAY_OF_MONTH),
                                getWeekDayFullName(calendar_date
                                        .get(Calendar.DAY_OF_WEEK)),
                                getWeekDayShortName(calendar_date
                                        .get(Calendar.DAY_OF_WEEK)), calendar_date
                                        .get(Calendar.HOUR_OF_DAY),
                                getHourIn12Format(calendar_date
                                        .get(Calendar.HOUR_OF_DAY)), calendar_date
                                        .get(Calendar.MINUTE), calendar_date
                                        .get(Calendar.SECOND), getAMPM(calendar_date));
                    }
                    if (dialog.isShowing() && isAutoDismiss)
                        dialog.dismiss();
                    break;
    
                case CANCEL:
                    if (iCustomDateTimeListener != null)
                        iCustomDateTimeListener.onCancel();
                    if (dialog.isShowing())
                        dialog.dismiss();
                    break;
            }
        }
    
        /**
         * @param date
         *            date in String
         * @param fromFormat
         *            format of your <b>date</b> eg: if your date is 2011-07-07
         *            09:09:09 then your format will be <b>yyyy-MM-dd hh:mm:ss</b>
         * @param toFormat
         *            format to which you want to convert your <b>date</b> eg: if
         *            required format is 31 July 2011 then the toFormat should be
         *            <b>d MMMM yyyy</b>
         * @return formatted date
         */
        public static String convertDate(String date, String fromFormat,
                                         String toFormat) {
            try {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(fromFormat);
                Date d = simpleDateFormat.parse(date);
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(d);
    
                simpleDateFormat = new SimpleDateFormat(toFormat);
                simpleDateFormat.setCalendar(calendar);
                date = simpleDateFormat.format(calendar.getTime());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return date;
        }
    
        private String getMonthFullName(int monthNumber) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MONTH, monthNumber);
    
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM");
            simpleDateFormat.setCalendar(calendar);
            String monthName = simpleDateFormat.format(calendar.getTime());
    
            return monthName;
        }
    
        private String getMonthShortName(int monthNumber) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MONTH, monthNumber);
    
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM");
            simpleDateFormat.setCalendar(calendar);
            String monthName = simpleDateFormat.format(calendar.getTime());
    
            return monthName;
        }
    
        private String getWeekDayFullName(int weekDayNumber) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.DAY_OF_WEEK, weekDayNumber);
    
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
            simpleDateFormat.setCalendar(calendar);
            String weekName = simpleDateFormat.format(calendar.getTime());
    
            return weekName;
        }
    
        private String getWeekDayShortName(int weekDayNumber) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.DAY_OF_WEEK, weekDayNumber);
    
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EE");
            simpleDateFormat.setCalendar(calendar);
            String weekName = simpleDateFormat.format(calendar.getTime());
    
            return weekName;
        }
    
        private int getHourIn12Format(int hour24) {
            int hourIn12Format = 0;
    
            if (hour24 == 0)
                hourIn12Format = 12;
            else if (hour24 <= 12)
                hourIn12Format = hour24;
            else
                hourIn12Format = hour24 - 12;
    
            return hourIn12Format;
        }
    
        private String getAMPM(Calendar calendar) {
            String ampm = (calendar.get(Calendar.AM_PM) == (Calendar.AM)) ? "AM"
                    : "PM";
            return ampm;
        }
    
        private void resetData() {
            calendar_date = null;
            is24HourView = true;
        }
    
        public static String pad(int integerToPad) {
            if (integerToPad >= 10 || integerToPad < 0)
                return String.valueOf(integerToPad);
            else
                return "0" + String.valueOf(integerToPad);
        }
    }
    

    In your Activity :

    MainActivity.java:

        public class MainActivity extends Activity{
    
         CustomDateTimePicker custom;
    Button btnEventDateTime;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
        btnEventDateTime = ((Button) findViewById(R.id.btnEventDateTime));
        custom = new CustomDateTimePicker(this,
                        new CustomDateTimePicker.ICustomDateTimeListener() {
    
                            @Override
                            public void onSet(Dialog dialog, Calendar calendarSelected,
                                              Date dateSelected, int year, String monthFullName,
                                              String monthShortName, int monthNumber, int day,
                                              String weekDayFullName, String weekDayShortName,
                                              int hour24, int hour12, int min, int sec,
                                              String AM_PM) {
        //                        ((TextInputEditText) findViewById(R.id.edtEventDateTime))
                                edtEventDateTime.setText("");
                                edtEventDateTime.setText(year
                                        + "-" + (monthNumber + 1) + "-" + calendarSelected.get(Calendar.DAY_OF_MONTH)
                                        + " " + hour24 + ":" + min
                                        + ":" + sec);
                            }
    
                            @Override
                            public void onCancel() {
    
                            }
                        });
                /**
                 * Pass Directly current time format it will return AM and PM if you set
                 * false
                 */
                custom.set24HourFormat(true);
                /**
                 * Pass Directly current data and time to show when it pop up
                 */
                custom.setDate(Calendar.getInstance());
                btnEventDateTime.setOnClickListener(
                        new View.OnClickListener() {
    
                            @Override
                            public void onClick(View v) {
                                custom.showDialog();
                            }
                        });
        }
        }
    
    0 讨论(0)
  • 2021-02-07 02:00

    Kotlin

    Here's the tested Kotlin code for combining the DatePickerDialog and TimePickerDialog together. It becomes simpler because of the support of the closures in Kotlin. The following function should be placed in your Fragment or Activity. The requireContext() method is a member of Fragment. If you are using Activity, use applicationContext instead.

    private fun pickDateTime() {
        val currentDateTime = Calendar.getInstance()
        val startYear = currentDateTime.get(Calendar.YEAR)
        val startMonth = currentDateTime.get(Calendar.MONTH)
        val startDay = currentDateTime.get(Calendar.DAY_OF_MONTH)
        val startHour = currentDateTime.get(Calendar.HOUR_OF_DAY)
        val startMinute = currentDateTime.get(Calendar.MINUTE)
    
        DatePickerDialog(requireContext(), DatePickerDialog.OnDateSetListener { _, year, month, day ->
            TimePickerDialog(requireContext(), TimePickerDialog.OnTimeSetListener { _, hour, minute ->
                val pickedDateTime = Calendar.getInstance()
                pickedDateTime.set(year, month, day, hour, minute)
                doSomethingWith(pickedDateTime)
            }, startHour, startMinute, false).show()
        }, startYear, startMonth, startDay).show()
    }
    

    Call the above function in onClickListener of your button as following:

    button.setOnClickListener { pickDateTime() }
    

    That's it!

    If you want to show clock in 12 hour or 24 hour format depending on user's settings, replace false with DateFormat.is24HourFormat(requireContext())

    0 讨论(0)
  • 2021-02-07 02:00

    Googled this problem and found usefull Enamul Haque's answer. Modified his code little bit and got this result. Its quick solution and will be improved, but works nice)

    public class DateTimePicker {
    
        @NonNull
        private final Calendar calendar = Calendar.getInstance();
        @Nullable
        private DatePickerDialog datePickerDialog;
        @Nullable
        private TimePickerDialog timePickerDialog;
        @Nullable
        private ResultCallback<Date> dateResultCallback;
    
        public void showDialog(@NonNull Context context, long time) {
            calendar.setTimeInMillis(time);
            closeDialogs();
            showDatePicker(context);
        }
    
        @Nullable
        public ResultCallback<Date> getDateResultCallback() {
            return dateResultCallback;
        }
    
        public void setDateResultCallback(@Nullable ResultCallback<Date> dateResultCallback) {
            this.dateResultCallback = dateResultCallback;
        }
    
        public long getTime() {
            return calendar.getTimeInMillis();
        }
    
        private void closeDialogs() {
            if (datePickerDialog != null) {
                datePickerDialog.dismiss();
                datePickerDialog = null;
            }
            if (timePickerDialog != null) {
                timePickerDialog.dismiss();
                timePickerDialog = null;
            }
        }
    
        private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                calendar.set(Calendar.YEAR, year);
                calendar.set(Calendar.MONTH, month);
                calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                timePicker(view.getContext());
            }
        };
    
        private TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() {
    
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                calendar.set(Calendar.MINUTE, minute);
                if (dateResultCallback != null) {
                    dateResultCallback.onResult(calendar.getTime());
                }
            }
        };
    
        private void showDatePicker(@NonNull Context context) {
            datePickerDialog = new DatePickerDialog(context,
                    dateSetListener,
                    calendar.get(Calendar.YEAR),
                    calendar.get(Calendar.MONTH),
                    calendar.get(Calendar.DAY_OF_MONTH));
            datePickerDialog.show();
        }
    
        private void timePicker(@NonNull Context context) {
            timePickerDialog = new TimePickerDialog(context,
                    timeSetListener,
                    calendar.get(Calendar.HOUR_OF_DAY),
                    calendar.get(Calendar.MINUTE),
                    true);
            timePickerDialog.show();
        }
    
        public void release() {
            closeDialogs();
            dateResultCallback = null;
        }
    
    }
    

    Dialogs calls via method showDialog(...), possible to release object when it not need anymore (in onDestroy() in activity f.e). And again - thanks Enamul Haque for idea.

    0 讨论(0)
  • 2021-02-07 02:03

    You Can Get Date And Time One By One Using Pickers In Android.

    Calendar getDate = Calendar.getInstance();
    
             cDay = getDate.get(Calendar.DAY_OF_MONTH);
             cMonth = getDate.get(Calendar.MONTH);
             cYear = getDate.get(Calendar.YEAR);
    
             timePickerDialog = new TimePickerDialog(DesignActivity.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    
                    final String AM_PM ;
    
                    if (hourOfDay > 12) {
                        hourOfDay -= 12;
                        AM_PM = "pm";
                    } else if (hourOfDay == 0) {
                        hourOfDay += 12;
                        AM_PM = "am";
                    } else if (hourOfDay == 12)
                        AM_PM = "pm";
                    else
                        AM_PM = "am";
    
                    hour1 = hourOfDay;
                    minutes1 = minute;
    
                    DatePickerDialog datePicker = new DatePickerDialog(DesignActivity.this, new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
    
                            cYear = year;
                            cMonth = month;
                            cDay = dayOfMonth;
    
                            editText.setText(hour1 + ":" +minutes1 + AM_PM  + "     " + cDay + "/" + cMonth + "/" + cYear);
    
                        }
                    },cYear,cMonth,cDay);
    
                    datePicker.show();
    
                }
            },hour1,minutes1,false);
    
            timePickerDialog.show();
    
        }
    });
    

    If You Will Need More Explanation About Click This.

    0 讨论(0)
  • 2021-02-07 02:03

    Based on @Yogesh Umesh Vaity's answer, I made an object for showing a DateTimePicker in Kotlin.

    class DateTimePicker(val context: Context, var pickTime:Boolean = false, var calendar: Calendar = Calendar.getInstance(),
                         var callback: (it : DateTimePicker) -> Unit) {
    
        companion object{
            @JvmStatic
            fun getFormat(format : String) : String{
                when(format){
                    "d" -> return "dd/MM/yyyy"
                    "t" -> return "HH:mm"
                    "dt" -> return "dd/MM/yyyy HH:mm"
                }
                return "dd/MM/yyyy"
            }
        }
    
        fun show(){
            val startYear = calendar.get(Calendar.YEAR)
            val startMonth = calendar.get(Calendar.MONTH)
            val startDay = calendar.get(Calendar.DAY_OF_MONTH)
            val startHour = calendar.get(Calendar.HOUR_OF_DAY)
            val startMinute = calendar.get(Calendar.MINUTE)
    
            DatePickerDialog(context, DatePickerDialog.OnDateSetListener { _, year, month, day ->
                if(pickTime) {
                    TimePickerDialog(context, TimePickerDialog.OnTimeSetListener { _, hour, minute ->
                        calendar.set(year, month, day, hour, minute)
                        callback(this)
                    }, startHour, startMinute, true).show()
                } else {
                    calendar.set(year,month,day)
                    callback(this)
                }
            }, startYear, startMonth, startDay).show()
        }
    
        fun showTime(){
            val startYear = calendar.get(Calendar.YEAR)
            val startMonth = calendar.get(Calendar.MONTH)
            val startDay = calendar.get(Calendar.DAY_OF_MONTH)
            val startHour = calendar.get(Calendar.HOUR_OF_DAY)
            val startMinute = calendar.get(Calendar.MINUTE)
    
            TimePickerDialog(context, TimePickerDialog.OnTimeSetListener { _, hour, minute ->
                calendar.set(startYear, startMonth, startDay, hour, minute)
                callback(this)
            }, startHour, startMinute, true).show()
        }
    }
    

    You could use the object from your Activity like this:

    // Open Date Picker only and set an EditText
    DateTimePicker(this){
        val sdf = SimpleDateFormat(DateTimePicker.getFormat("d"), Locale.getDefault())
        editText.setText(sdf.format(it.calendar.time))
    }.show()
    
    // Open Date Picker then Time picker and set an EditText
    DateTimePicker(this, true){
        val sdf = SimpleDateFormat(DateTimePicker.getFormat("dt"), Locale.getDefault())
        editText.setText(sdf.format(it.calendar.time))
    }.show()
    
    // Open Time Picker only and set an EditText
    DateTimePicker(this){
        val sdf = SimpleDateFormat(DateTimePicker.getFormat("t"), Locale.getDefault())
        editText.setText(sdf.format(it.calendar.time))
    }.showTime()
    
    // Use your own calendar object if you prefer to use your pre-configured calendar
    val myCalendar = Calendar.getInstance()
    myCalendar.set(Calendar.YEAR, 1995)
    DateTimePicker(this, false, myCalendar){
        val sdf = SimpleDateFormat(DateTimePicker.getFormat("d"), Locale.getDefault())
        editText.setText(sdf.format(it.calendar.time))
    }.show()
    
    0 讨论(0)
提交回复
热议问题