android指定DatePickerDialog樣式并不顯示年的實(shí)現(xiàn)代碼
有很多地方要用到DatePickerDialog。但有時(shí)項(xiàng)目用到的主題樣式是很丑的樣式,顯示出來(lái)的真丑。
而我們真正想要的樣式是這樣的。
這個(gè)就漂亮多了。而且很多的時(shí)候都不需要顯示“年”,下面看通過(guò)指定主題來(lái)顯示自己想要的樣式,并且通過(guò)反射機(jī)制來(lái)隱藏“年”,而且可以舉一反三,對(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的值,來(lái)看看你手機(jī)支持哪些亂七八糟的主題,當(dāng)然這只是玩下,還是正規(guī)點(diǎn)寫上這個(gè)指定主題。
try{}catch(){}里面開(kāi)始使用反射來(lái)獲取“年”的布局,因?yàn)樵创a里年的這個(gè)字段使用了private修飾,而且沒(méi)有g(shù)et方法提供,所以要用getDeclareField()來(lái)獲取這個(gè)Field.然后解封裝,否則也是獲取不到的,也就是setAccessible(true),意思就是可訪問(wèn)了,這個(gè)時(shí)候獲取到的還不是當(dāng)前實(shí)例的值,只是得到了這個(gè)類里面的一個(gè)字段信息,最后一句,filed.get(Object)就是獲取了當(dāng)前實(shí)例所擁有的這個(gè)字段值,當(dāng)然就是顯示的這個(gè)“年”了,就可以對(duì)這個(gè)進(jìn)行操作了,而我只需要隱藏就可以了。有網(wǎng)上看了有些說(shuō)通過(guò)布局來(lái)一層層獲取,這種方法可讀性不高,而且不同的版本改動(dòng)而已的可能性很大,這樣就獲取不到這個(gè)“年”了,相對(duì)來(lái)說(shuō),改動(dòng)這個(gè)字段名的可能性應(yīng)該會(huì)小些。
結(jié)束,這只是提供一種思路,可能還有更好的辦法,大神勿噴!
以上這篇android指定DatePickerDialog樣式并不顯示年的實(shí)現(xiàn)代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android開(kāi)發(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)文章
Android開(kāi)發(fā)模仿qq視頻通話懸浮按鈕(實(shí)例代碼)
這篇文章主要介紹了Android開(kāi)發(fā)模仿qq視頻通話懸浮按鈕功能的實(shí)例代碼,需要的的朋友參考下2017-02-02Android實(shí)現(xiàn)滑動(dòng)加載數(shù)據(jù)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)滑動(dòng)加載數(shù)據(jù)的方法,實(shí)例分析了Android通過(guò)滑動(dòng)實(shí)現(xiàn)動(dòng)態(tài)加載數(shù)據(jù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07簡(jiǎn)略分析Android的Retrofit應(yīng)用開(kāi)發(fā)框架源碼
這篇文章主要介紹了Android的Retrofit應(yīng)用開(kāi)發(fā)框架的源碼分析,作者對(duì)Volley和Retrofit兩個(gè)框架進(jìn)行了一些對(duì)比,比較精彩,需要的朋友可以參考下2016-02-02Android 解決監(jiān)聽(tīng)home鍵的幾種方法
這篇文章主要介紹了Android 解決監(jiān)聽(tīng)home鍵的幾種方法的相關(guān)資料,需要的朋友可以參考下2017-02-02android實(shí)現(xiàn)用戶體驗(yàn)超棒的微信WebView進(jìn)度條
本篇文章主要介紹了android實(shí)現(xiàn)用戶體驗(yàn)超棒的微信WebView進(jìn)度條,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Android基礎(chǔ)控件(EditView、SeekBar等)的使用方法
這篇文章主要介紹了Android基礎(chǔ)控件的屬性及使用方法,介紹了基礎(chǔ)控件有TextView、ImageView、Button、EditView等,感興趣的小伙伴們可以參考一下2016-03-03Android 自定義圖片地圖坐標(biāo)功能的實(shí)現(xiàn)
最近項(xiàng)目要求實(shí)現(xiàn)一個(gè)在自定義地圖圖片上添加坐標(biāo)信息的功能,類似于在圖片做標(biāo)注的功能,這種功能糾結(jié)該如何實(shí)現(xiàn)呢?下面小編通過(guò)實(shí)例代碼給大家介紹Android 自定義地圖的實(shí)現(xiàn),需要的朋友參考下吧2021-07-07Android使用RecyclerView仿美團(tuán)分類界面
這篇文章主要為大家詳細(xì)介紹了Android使用RecyclerView仿美團(tuán)分類界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android開(kāi)發(fā)ListView中下拉刷新上拉加載及帶列的橫向滾動(dòng)實(shí)現(xiàn)方法
這篇文章主要介紹了Android開(kāi)發(fā)ListView中下拉刷新上拉加載及帶列的橫向滾動(dòng)實(shí)現(xiàn)方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07Android studio實(shí)現(xiàn)菜單效果
這篇文章主要為大家詳細(xì)介紹了Android studio實(shí)現(xiàn)菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10