2010-11-08 153 views
20

我想禁用android sdk日期選擇器上的日期選擇選項。任何簡單的XML配置將是最好的如何顯示只有月份和年份字段的Android日期選取器?

+0

你試過什麼嗎?您是否使用搜索引擎搜索解決方案? – Patrick 2010-11-08 10:29:44

+1

事實上,我確實發現人們說它是不可能的,這是不正確的,但我沒有清楚如何向前推進,但它的可能性。謝謝 – carbonr 2010-11-11 05:06:40

回答

16

我剛剛發佈了一個新的日期選擇器框架,它允許您創建自定義日期選擇器。我還提供了一些示例日期選擇器,例如您正在尋找的日期選擇器。希望,它適用於你。

代碼可以在這裏找到:https://github.com/bendemboski/DateSlider

UPDATE 06/2014: 這個庫的開發2010年一直沒有維護2011年以來所以這是最有可能過時了現在。

+2

自定義日期選擇器是awsome – 2011-12-31 15:21:20

+0

哦維護Wordpress頁面的樂趣...我更新了GitHub存儲庫的鏈接 – Daniel 2012-12-10 10:32:39

+0

它是否仍然相關?你能否更新項目以支持gradle和android studio? – deej 2014-06-21 10:57:27

1

編輯:根據下面的評論,我不會按照這個答案了。

我不認爲你可以做到這一點與默認日期選擇器。您必須從基本的Android UI元素中創建它。但是,不要去那麼麻煩,爲什麼不使用更好的庫元素,比如這個看起來很漂亮的iPhone式輪子:http://code.google.com/p/android-wheel/我還沒有使用它,但我打算!

+9

2011年1月這並不是壞的建議,但如果你現在正在閱讀,我建議不要使用模仿iOS的庫。谷歌不喜歡:http://developer.android.com/design/patterns/pure-android.html – theelfismike 2013-01-30 16:39:50

+1

用戶也不喜歡那 – Roel 2015-04-07 09:23:44

15

有可能使用反射破解DatePicker實例。這樣,您就可以訪問代表DatePicker當天的NumberPicker實例:

datePicker = (DatePicker) findViewById(R.id.expiration_date); 
try { 
    Field f[] = datePicker.getClass().getDeclaredFields(); 
    for (Field field : f) { 
     if (field.getName().equals("mDayPicker")) { 
      field.setAccessible(true); 
      Object dayPicker = new Object(); 
      dayPicker = field.get(datePicker); 
      ((View) dayPicker).setVisibility(View.GONE); 
     } 
    } 
} catch (SecurityException e) { 
    Log.d("ERROR", e.getMessage()); 
} 
catch (IllegalArgumentException e) { 
    Log.d("ERROR", e.getMessage()); 
} catch (IllegalAccessException e) { 
    Log.d("ERROR", e.getMessage()); 
} 
+0

這對我有效。請注意,我必須將mDayPicker更改爲mDaySpinner。我不確定在哪個API級別引入了此更改,但我正在爲Android 4.0.3構建。 – Setzer22 2014-12-04 19:03:41

+1

這可能會在Android 5中打破。0和更高,因爲DatePicker不再使用這些號碼選取器! – Roel 2015-04-07 09:26:36

+0

在Android 6上,字段爲mDelegate,LOG_TAG,MODE_CALENDAR,MODE_SPINNER。該解決方案對我無效。 – 2017-07-03 11:08:17

0

這在2.2版本中正常工作。但對話框的標題沒有改變。

for (Field datePickerDialogField : datePickerDialogFields) {   

    if (datePickerDialogField.getName().equals("mDatePicker")) { 
     datePickerDialogField.setAccessible(true); 
     DatePicker datePicker = (DatePicker) datePickerDialogField.get(datePickerDialog); 

     Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields(); 

     for (Field datePickerField : datePickerFields) { 

      if ("mDayPicker".equals(datePickerField.getName())) { 
       datePickerField.setAccessible(true); 
       Object dayPicker = new Object(); 
       dayPicker = datePickerField.get(datePicker); 
       ((View) dayPicker).setVisibility(View.GONE); 
      } 
     } 
    } 
} 
0

可以使用https://github.com/SimonVT/android-datepicker部件的回遷的兼容性,使這一天選擇器 '走了'

<net.simonvt.numberpicker.NumberPicker 
     android:id="@+id/day" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="16dip" 
     android:layout_marginRight="16dip" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:visibility="gone" 
     /> 
3

說起反映這部作品在是Android 4.4.2 SDK的

"mDaySpinner" 

代替

"mDayPicker" 
2

我認爲這是最好的解決方案

datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 
相關問題