在API 21中以编程方式隐藏DatePicker中的Calendarview

我遇到了与此主题相同的问题: Android Material Design Inline Datepicker问题 ,但我没有使用XML布局,而是以编程方式构建DatePicker。

这是我正在使用但不起作用的代码

DatePicker dpView = new DatePicker(ctx); dpView.setCalendarViewShown(false); dpView.setSpinnersShown(true); 

我怎样才能让它发挥作用?

Android 5.0中的问题是确定是否使用日历的“模式”是在构造时读取的,而在代码中,您无法在构建之前设置模式,因此为时已晚。 (来源在这里: DatePicker源代码 )

我的解决方案是创建我自己的可重用DatePicker布局,指定“无日历”模式,并以编程方式使用该布局而不是Android的默认构造我的DateTimes。

底线是,创建一个“DatePicker.axml”文件,将其放在resources文件夹中,并将以下内容粘贴为其内容:

  

并在代码中声明它,如下所示:

 LayoutInflater inflater = LayoutInflater.From( Activity ); DatePicker datePicker = (DatePicker)inflater.Inflate( Resource.Layout.DatePicker, null ); 

如果你必须在DatePickerFragment中以编程方式设置它,只需设置:

 DatePickerDialog dialog = new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog_MinWidth, this, year, month, day); 

无论你喜欢什么样的风格。

添加到用户Luismi的答案 :

主题Theme.Holo.DialogTheme.Holo.Dialog.MinWidth可能会导致问题,如在日期选择器周围绘制两个框。

相反,你应该主题Theme.Holo.Dialog.NoFrame来防止这种情况。 主题可能无法从您的代码中访问,因此只需创建自己的主题:

  

编辑:解决此问题的更好方法是使用重新创建旧设计的SpinnerDatePicker库 。

我只是改变了我的AppTheme(v21)风格并​​且工作: