前言
在使用系統(tǒng)的DatePickerDialog時(shí),你會(huì)發(fā)現(xiàn),在不同的SDK版本上,顯示的效果是不同,這是系統(tǒng)做的兼容性,如果想設(shè)置為統(tǒng)一的顯示效果,會(huì)有版本限制。這里我們來(lái)使用DatePickerShowDialog來(lái)替換系統(tǒng)的DatePickerDialog。
DatePickerDialog的使用
DatePickerDialog的使用非常簡(jiǎn)單,只需要幾行代碼就可以實(shí)現(xiàn),如下:
private void showDateDialog() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Log.e("=====", "===year==" + year + "==month==" + monthOfYear + "==day==" + dayOfMonth);
}
}, year, month, day).show();
}
這里傳入年月日,是為了初始化默認(rèn)為當(dāng)前時(shí)間。
注意:這里有一個(gè)坑,就是獲取到的年月日中,月份是與你選中的月份小于1的,例如,你選中的是7月,但是獲得的是6,因此需要手動(dòng)處理一下。
關(guān)于現(xiàn)實(shí)的樣式問(wèn)題,可以參考這篇文章:
Android DatePickerDialog和TimePickerDialog顯示樣式
在這篇文章中介紹了一些樣式的設(shè)置,但是會(huì)出現(xiàn)下面的情況:

大概的意思就是不能這樣使用,但是是可以運(yùn)行的,我們點(diǎn)擊進(jìn)去看一下會(huì)發(fā)現(xiàn):

這就是問(wèn)題所在。
因此在這里才有了使用DatePickerShowDialog替換DatePickerDialog的想法。
實(shí)現(xiàn)
因?yàn)楫a(chǎn)品要求顯示的樣式為:

因此對(duì)其進(jìn)行總體的設(shè)置。DatePickerShowDialog實(shí)現(xiàn)是和DatePickerDialog的實(shí)現(xiàn)方式一樣的,甚至可以說(shuō)是DatePickerDialog的復(fù)制品,用最簡(jiǎn)單粗暴的方式將DatePickerDialog里面的代碼全部復(fù)制過(guò)來(lái),去掉報(bào)警的地方,就形成了現(xiàn)在的DatePickerShowDialog。
區(qū)別:區(qū)別就是兩個(gè)類(lèi)對(duì)應(yīng)不同的layout文件
<- DatePickerShowDialog layout ->
<?xml version="1.0" encoding="utf-8"?>
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/datePicker"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:spinnersShown="true"
android:calendarViewShown="false"
android:datePickerMode="spinner"/>
翻看源碼,你會(huì)發(fā)現(xiàn)其中的差別就只有最后一句。其他的部分同源碼部分。使用方式同系統(tǒng)控件一致。
寫(xiě)在最后
這種方式可以進(jìn)行修改相關(guān)的樣式問(wèn)題,如直接使用第一張圖片的方式設(shè)置也是可以的,雖報(bào)錯(cuò)但是可以實(shí)現(xiàn)這個(gè)效果,使用替換布局的方式,也會(huì)提醒a(bǔ)ndroid:datePickerMode="spinner"只能在5.0以上可以使用。因此看如何取舍。當(dāng)然也可以自定義一個(gè)Dialog來(lái)實(shí)現(xiàn),這個(gè)要看讀者自己決定。之所以寫(xiě)這篇文章一方面記錄一下DatePickerDialog的使用方法,另一方面是記錄一下這種修改方式。不喜,勿噴啊?。?!