天天看點

Android時間選擇器和日期選擇器的使用注意

本文就時間和日期選擇器做一個簡單的使用

時間選擇器

一般設定時間我們都會選擇TimePicker或者TimePickerDialog,因為TimePickerDialog直接就是對話框使用友善,是以很多初學的就會更多選擇TimePickerDialog,不說他會有什麼不想要的效果,先看看它的使用方法

new TimePickerDialog(MainActivity.this,
            new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hour, int minute) {
                    //在此擷取時間:hour和minute,然後執行修改(要root權限)
                }
            }, calendar.get(Calendar.HOUR_OF_DAY), 
                calendar.get(Calendar.MINUTE), true).show();
           

效果如下:

Android時間選擇器和日期選擇器的使用注意

我們不管效果,就單單講它的功能,你選擇了時間之後,不管是點選完成還是點選了周圍使得這個對話框消失,時間都已經被修改了,也就是說記這個完成按鈕形同虛設,為什麼會有這樣的效果呢?因為這個對話框消失的時候就會調用onTimeSet方法(不管是點完成還是周圍)

這不是我們想要的效果,我們要的是點選完成修改時間,點選周圍退出時不修改時間。

這時候我們可能會想到監聽一下完成按鈕的點選不就行了嗎,好我們來試試看:

TimePickerDialog timePickerDialog = new TimePickerDialog(this,
                    new OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay,
                                int minute) {
                            //在此擷取時間:hour和minute,然後執行修改(要root權限)
                        }
                    }, calendar.get(Calendar.HOUR_OF_DAY),
                    calendar.get(Calendar.MINUTE), false);

            timePickerDialog.setTitle(R.string.title);
            timePickerDialog.setButton(TimePickerDialog.BUTTON_POSITIVE,
                    getString(R.string.ok),
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
            timePickerDialog.show();
           

這下好了在onClick中拿不到時間了,想想是不是可以定義一個全局變量什麼的,在onTimeSet中設定,然後在onClick中拿到進行時間設定,但是,,,,這裡要說但是,你會發現先執行的onclick然後執行的onTimeSet(我看有些部落格說重寫了onclick會不響應onTimeSet,但我這裡沒有遇到這個情況,就按我自己的測試結果寫吧),我一開始也說了對話框消失的時候會調用onTimeSet,是以這裡會出現那種每次點選确定會設定成上次選擇的時間 的bug,效果很不理想,想了想,每次對話框消失的時候會調用onTimeSet,然後在其他地方又拿不到時間(就是我們滑動之後的那個時間),果斷的不能用TimePickerDialog 實作我想要的效果,沒辦法隻能選擇使用較為麻煩的TimePicker。

TimePicker是一個控件,像button一樣使用,得在xml中進行布局,下面是使用的詳細方法。

<!--?xml version=1.0 encoding=utf-8?-->
<linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" android:padding="10dip" xmlns:android="http://schemas.android.com/apk/res/android">

    <Timepicker android:id="@+id/date_picker" android:layout_gravity="center" android:layout_height="wrap_content" android:layout_margintop="5dip" android:layout_width="wrap_content">
    </Timepicker > 
 </linearlayout>
           
//自定義控件
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                View view = (LinearLayout) getLayoutInflater().inflate(R.layout.time_dialog, null);
                final TimePicker timePicker = (TimePicker) view.findViewById(R.id.time_picker);
                //初始化時間
                calendar.setTimeInMillis(System.currentTimeMillis());
                timePicker.setIs24HourView(true); 
                timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); 
                timePicker.setCurrentMinute(Calendar.MINUTE); 
                //設定time布局
                builder.setView(view);
                builder.setTitle("設定時間資訊");
                builder.setPositiveButton("确  定", new DialogInterface.OnClickListener() { 
                        @Override
                        public void onClick(DialogInterface dialog, int which) { 
                            mHour = timePicker.getCurrentHour();
                            mMinute = timePicker.getCurrentMinute();

                            dialog.cancel(); 
                        } 
                }); 

                builder.create().show();
           

這樣就實作了我們想要的效果。

日期選擇器

日期選擇器的實作使用DatePicker和DatePickerDialog,其他的可以參考上面的時間選擇器,基本都是一樣的,這裡不再過多的介紹。