android指定DatePickerDialog樣式并不顯示年的實(shí)現(xiàn)代碼
有很多地方要用到DatePickerDialog。但有時(shí)項(xiàng)目用到的主題樣式是很丑的樣式,顯示出來的真丑。

而我們真正想要的樣式是這樣的。

這個(gè)就漂亮多了。而且很多的時(shí)候都不需要顯示“年”,下面看通過指定主題來顯示自己想要的樣式,并且通過反射機(jī)制來隱藏“年”,而且可以舉一反三,對(duì)這上面的東西做任務(wù)的修改。
private void showDatePickerDialog() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int year = calendar.get(Calendar.YEAR);
final int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT, onDateSetListener, year, month, day);
datePickerDialog.setCancelable(true);
DatePicker dp = datePickerDialog.getDatePicker();
//設(shè)置當(dāng)天為最小值
dp.setMinDate(calendar.getTimeInMillis());
//設(shè)置最大值是7天
calendar.set(Calendar.DAY_OF_MONTH, day + 6);
dp.setMaxDate(calendar.getTimeInMillis());
try {
//獲取指定的字段
Field field = dp.getClass().getDeclaredField("mYearSpinner");
//解封裝
field.setAccessible(true);
//獲取當(dāng)前實(shí)例的值
NumberPicker np = ((NumberPicker) field.get(dp));
np.setVisibility(View.GONE);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
datePickerDialog.show();
}
在實(shí)例化DatePickerDialog的時(shí)候,第二個(gè)參數(shù)指定了主題為THEME_HOLO_LIGHT就是想要的樣式,而且有一個(gè)很好玩的地方,你可以傳任何類型為int的值,來看看你手機(jī)支持哪些亂七八糟的主題,當(dāng)然這只是玩下,還是正規(guī)點(diǎn)寫上這個(gè)指定主題。
try{}catch(){}里面開始使用反射來獲取“年”的布局,因?yàn)樵创a里年的這個(gè)字段使用了private修飾,而且沒有g(shù)et方法提供,所以要用getDeclareField()來獲取這個(gè)Field.然后解封裝,否則也是獲取不到的,也就是setAccessible(true),意思就是可訪問了,這個(gè)時(shí)候獲取到的還不是當(dāng)前實(shí)例的值,只是得到了這個(gè)類里面的一個(gè)字段信息,最后一句,filed.get(Object)就是獲取了當(dāng)前實(shí)例所擁有的這個(gè)字段值,當(dāng)然就是顯示的這個(gè)“年”了,就可以對(duì)這個(gè)進(jìn)行操作了,而我只需要隱藏就可以了。有網(wǎng)上看了有些說通過布局來一層層獲取,這種方法可讀性不高,而且不同的版本改動(dòng)而已的可能性很大,這樣就獲取不到這個(gè)“年”了,相對(duì)來說,改動(dòng)這個(gè)字段名的可能性應(yīng)該會(huì)小些。
結(jié)束,這只是提供一種思路,可能還有更好的辦法,大神勿噴!
以上這篇android指定DatePickerDialog樣式并不顯示年的實(shí)現(xiàn)代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android開發(fā)之DatePickerDialog、TimePickerDialog時(shí)間日期對(duì)話框用法示例
- Android日期選擇器對(duì)話框DatePickerDialog使用詳解
- Android 中NumberPicker,DatePicker與DatePickerDialog中分割顏色的修改實(shí)例代碼
- Android DatePicker和DatePickerDialog基本用法示例
- 詳解Android中提示對(duì)話框(ProgressDialog和DatePickerDialog和TimePickerDialog&PopupWindow)
- Android彈出DatePickerDialog并獲取值的方法
相關(guān)文章
kotlin中的數(shù)據(jù)轉(zhuǎn)換方法(示例詳解)
這篇文章介紹了Kotlin中將數(shù)字轉(zhuǎn)換為字符串和字符串轉(zhuǎn)換為數(shù)字的多種方法,包括使用`toString()`、字符串模板、格式化字符串、處理可空類型等,同時(shí),也詳細(xì)講解了如何安全地進(jìn)行字符串到數(shù)字的轉(zhuǎn)換,并處理了不同進(jìn)制和本地化格式的字符串轉(zhuǎn)換,感興趣的朋友一起看看吧2025-03-03
Android編程實(shí)現(xiàn)調(diào)用相冊(cè)、相機(jī)及拍照后直接裁剪的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)調(diào)用相冊(cè)、相機(jī)及拍照后直接裁剪的方法,涉及Android拍照及圖形處理相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
Android實(shí)現(xiàn)雙模(CDMA/GSM)手機(jī)短信監(jiān)聽的方法
這篇文章主要介紹了Android實(shí)現(xiàn)雙模(CDMA/GSM)手機(jī)短信監(jiān)聽的方法,涉及Android短信的原理與相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Android軟件啟動(dòng)動(dòng)畫及動(dòng)畫結(jié)束后跳轉(zhuǎn)的實(shí)現(xiàn)方法
這篇文章主要介紹了Android軟件啟動(dòng)動(dòng)畫及動(dòng)畫結(jié)束后跳轉(zhuǎn)的實(shí)現(xiàn)方法,實(shí)例分析了Android圖片播放及定時(shí)器的相關(guān)使用技巧,非常具有使用價(jià)值,需要的朋友可以參考下2015-10-10
Android學(xué)習(xí)之AppWidget高級(jí)效果
這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)之AppWidget高級(jí)效果的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-08-08
Android設(shè)備adb連接后顯示device unauthorized解決方案
這篇文章主要為大家介紹了Android設(shè)備adb連接后顯示device unauthorized解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Android實(shí)現(xiàn)購物車添加商品動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)購物車添加商品動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06

