2010-11-08 109 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); 
相关问题