Android開發(fā)之自定義DataTimePicker(日期時間選擇器)

最近項目中,要求日期和時間在同一個頁面同時選擇,這個就需要自定義了,其實所謂的自定義只不過是把時間和日期對話框組合在一起而已。

一、基本知識

1、關(guān)于日期的幾個控件:

DatePicker(日期選擇控件)

TimePicker(時間選擇控件)

DatePickerDialog(日期選擇對話框)

TimePickerDialog(時間選擇對話框)

AnalogClock(模擬時鐘控件)

DigitalClock(數(shù)字時鐘控件)

2、相關(guān)控件介紹

DatePicker 、 TimePicker 都繼承自Android.widget.FrameLayout,并且默認展示風(fēng)格、與操作風(fēng)格也類似。DatePicker用于展示一個日期選擇控件,TimePicker用于展示一個時間選擇控件。

DatePicker常用相關(guān)屬性:

android:calendarViewShown:是否顯示日歷

android:spinnersShown:是否顯示為滾動條樣式(會同時顯示日歷和滾動條樣式上邊兩個都不設(shè)置)

android:startYear:設(shè)置可選開始年份。

android:endYear:設(shè)置可選結(jié)束年份。

android:maxDate:設(shè)置可選最大日期,以mm/dd/yyyy格式設(shè)置。

android:minDate:設(shè)置可選最小日期,以mm/dd/yyyy格式設(shè)置。

DatePicker的方法而言,除了常用獲取屬性的setter、getter方法之外,還需要特別注意一個初始化的方法init()方法,用于做DatePicker控件的初始化,并且設(shè)置日期被修改后,回調(diào)的響應(yīng)事件。此方法的簽名如下:

init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)

從上面的init()方法可以看到,DatePicker被修改時響應(yīng)的事件是DatePicker.OnDateChangedListener 事件,如果要響應(yīng)此事件,需要實現(xiàn)其中的onDateChanged()方法,其中參數(shù)從簽名即可了解意思,這里不再累述。

onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)

作為一個時間選擇控件來說,TimePicker需要與時間相關(guān)的getter、setter方法之外,還需要有時間被修改夠,回調(diào)的響應(yīng)事件。

TimePicker常用方法有如下幾個:

is24HourView():判斷是否為24小時制。

setIs24HourView():設(shè)置是否為24小時制顯示。

getCurrentXxx():獲取當(dāng)前時間。

setCurrentXxx():設(shè)置當(dāng)前時間。

setOnTimeChangedListener():設(shè)置時間被修改的回調(diào)方法。

TimePicker控件被修改的回調(diào)方法,通過setOnTimeChangedListener()方法設(shè)置,其傳遞一個 TimePicker.OnTimeChangedListener 接口,需要實現(xiàn)其中的onTimeChanged()方法。

二、實現(xiàn)步驟

首先,對話框的布局:


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:gravity="center"

    android:orientation="vertical">

    <DatePicker

        android:id="@+id/data_picker"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:calendarViewShown="false" />

    <TimePicker

        android:id="@+id/timer_picker"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

</LinearLayout>

然后,我封裝了一個工具類:


public static void getDateTime(Context mContext, final TextView textView) {

        View date_time_picker = View.inflate(mContext, R.layout.date_time_picker, null);

        final DatePicker datePicker = (DatePicker) date_time_picker.findViewById(R.id.data_picker);

        final TimePicker timePicker = (TimePicker) date_time_picker.findViewById(R.id.timer_picker);

        timePicker.setIs24HourView(true);

        //  Build  DateTimeDialog

        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

        builder.setView(date_time_picker);

        builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                String dateStr = datePicker.getYear() + "-" + datePicker.getMonth() + "-" + datePicker.getDayOfMonth();

                int currentMinute = timePicker.getCurrentMinute();

                String curMinute = "";

                if (currentMinute < 10) {

                    curMinute = "0" + currentMinute;

                } else {

                    curMinute = String.valueOf(currentMinute);

                }

                String timeStr = timePicker.getCurrentHour() + ":" + curMinute;

                textView.setText(dateStr + "  " + timeStr);

            }

        });

        builder.show();

    }

最后,直接調(diào)用就好了


DateUtil.getDateTime(this, tv);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容