Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android指定DatePickerDialog樣式並不顯示年的實現代碼

android指定DatePickerDialog樣式並不顯示年的實現代碼

編輯:關於Android編程

有很多地方要用到DatePickerDialog。但有時項目用到的主題樣式是很丑的樣式,顯示出來的真丑。


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


這個就漂亮多了。而且很多的時候都不需要顯示“年”,下面看通過指定主題來顯示自己想要的樣式,並且通過反射機制來隱藏“年”,而且可以舉一反三,對這上面的東西做任務的修改。

 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();
    //設置當天為最小值
    dp.setMinDate(calendar.getTimeInMillis());
    //設置最大值是7天
    calendar.set(Calendar.DAY_OF_MONTH, day + 6);
    dp.setMaxDate(calendar.getTimeInMillis());
    try {
      //獲取指定的字段
      Field field = dp.getClass().getDeclaredField("mYearSpinner");
      //解封裝
      field.setAccessible(true);
      //獲取當前實例的值
      NumberPicker np = ((NumberPicker) field.get(dp));
      np.setVisibility(View.GONE);
    } catch (NoSuchFieldException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    }
    datePickerDialog.show();

  }

在實例化DatePickerDialog的時候,第二個參數指定了主題為THEME_HOLO_LIGHT就是想要的樣式,而且有一個很好玩的地方,你可以傳任何類型為int的值,來看看你手機支持哪些亂七八糟的主題,當然這只是玩下,還是正規點寫上這個指定主題。

try{}catch(){}裡面開始使用反射來獲取“年”的布局,因為源碼裡年的這個字段使用了private修飾,而且沒有get方法提供,所以要用getDeclareField()來獲取這個Field.然後解封裝,否則也是獲取不到的,也就是setAccessible(true),意思就是可訪問了,這個時候獲取到的還不是當前實例的值,只是得到了這個類裡面的一個字段信息,最後一句,filed.get(Object)就是獲取了當前實例所擁有的這個字段值,當然就是顯示的這個“年”了,就可以對這個進行操作了,而我只需要隱藏就可以了。有網上看了有些說通過布局來一層層獲取,這種方法可讀性不高,而且不同的版本改動而已的可能性很大,這樣就獲取不到這個“年”了,相對來說,改動這個字段名的可能性應該會小些。

結束,這只是提供一種思路,可能還有更好的辦法,大神勿噴!

以上這篇android指定DatePickerDialog樣式並不顯示年的實現代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved