本文就時間和日期選擇器做一個簡單的使用
時間選擇器
一般設定時間我們都會選擇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();
效果如下:
我們不管效果,就單單講它的功能,你選擇了時間之後,不管是點選完成還是點選了周圍使得這個對話框消失,時間都已經被修改了,也就是說記這個完成按鈕形同虛設,為什麼會有這樣的效果呢?因為這個對話框消失的時候就會調用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,其他的可以參考上面的時間選擇器,基本都是一樣的,這裡不再過多的介紹。