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

时间:2014-12-30 17:17:13

标签: java android datepicker

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

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

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

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

4 个答案:

答案 0 :(得分:24)

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

DatePickerDialog dialog = new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog_MinWidth, this, year, month, day);
用你喜欢的任何风格

答案 1 :(得分:9)

Android 5.0中的问题是"模式"确定是否使用日历是在构造时读取的,在代码中你不能设置模式,直到之后它被构造,因此为时已晚。 (来源在这里:DatePicker Source Code

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

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

<?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"/>

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

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

答案 2 :(得分:6)

从用户answer添加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>

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

答案 3 :(得分:1)

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

<style name="AppTheme"  parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="android:timePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="android:datePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="PickerDialogCustom" parent="AlertDialogCustom">
    <item name="android:textColor">@color/colorPrimary</item>
    <item name="android:textColorPrimary">@color/colorPrimaryDark</item>
    <item name="colorControlNormal">@color/greyLight500</item>
    <item name="android:layout_margin">2dp</item>
    <item name="android:datePickerMode">spinner</item>
</style>

<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:positiveButtonText">@color/colorPrimary</item>
    <item name="android:negativeButtonText">@color/greyDark200</item>
    <item name="buttonBarNegativeButtonStyle">@style/negativeButton</item>
    <item name="android:datePickerStyle">@style/PickerDialogCustom</item>
</style>