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

lui*_*ero 1 java android datepicker

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

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

DatePicker dpView = new DatePicker(ctx);
dpView.setCalendarViewShown(false);
dpView.setSpinnersShown(true);
Run Code Online (Sandbox Code Playgroud)

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

Lui*_*smi 24

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

DatePickerDialog dialog = new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog_MinWidth, this, year, month, day);
Run Code Online (Sandbox Code Playgroud)

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

  • 如果有人在日期选择器周围绘制了两个方框或其他样式问题,请查看[我的答案](http://stackoverflow.com/a/39875089/410143). (2认同)

小智 9

在安卓5.0的问题是"模式",它确定是否使用日历或没有在构建时读取,并在代码中你不能设置模式,直到它已建成,从而为时已晚.(来源是:DatePicker源代码)

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

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

<?xml version="1.0" encoding="utf-8"?>

<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:calendarViewShown="false"
          android:datePickerMode="spinner"/>
Run Code Online (Sandbox Code Playgroud)

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

LayoutInflater inflater = LayoutInflater.From( Activity );
DatePicker datePicker = (DatePicker)inflater.Inflate( Resource.Layout.DatePicker, null );
Run Code Online (Sandbox Code Playgroud)

  • @JHawkzz你能解释一下吗?特别是inflater部分?我们如何将它集成到DialogFragment中?和为什么axml? (2认同)

tha*_*kay 6

添加用户Luismi答案:

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

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

<style name="DatePickerDialogTheme" parent="android:Theme.Holo.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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