在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.Dialog
或Theme.Holo.Dialog.MinWidth
可能会导致问题,如在日期选择器周围绘制两个框。
相反,你应该主题Theme.Holo.Dialog.NoFrame
来防止这种情况。 主题可能无法从您的代码中访问,因此只需创建自己的主题:
编辑:解决此问题的更好方法是使用重新创建旧设计的SpinnerDatePicker库 。
我只是改变了我的AppTheme(v21)风格并且工作: