日期选择器在DialogFragment中忽略了setCalendarViewShown。

6

我想在DialogFragment中展示一个日期选择器:

public class DatePickerDialogFragment extends DialogFragment {
    private OnDateSetListener dateSetListener = null;
    private String title = null;

    public DatePickerDialogFragment() {}

    public DatePickerDialogFragment(OnDateSetListener dateSetListener, String title) {
        this.dateSetListener = dateSetListener;
        this.title = title;
    }

    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar calendar = Calendar.getInstance();

        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog datePickerDialog = new DatePickerDialog(this.getActivity(), this.dateSetListener, year, month, day);
        datePickerDialog.getDatePicker().setCalendarViewShown(false);
        datePickerDialog.setTitle(this.title);

        return datePickerDialog;
    }
}

很遗憾,datePickerDialog.getDatePicker().setCalendarViewShown(false);这个代码完全被忽略了。我讨厌日历视图,因为它很丑陋不舒适。那么我该如何禁用它呢?


尝试在xml中设置android:calendarViewShown="false" android:datePickerMode="spinner" - Apurva
我通过编程方式初始化了我的日期选择器,并希望它保持这样的状态。在编程初始化时,没有设置datePickerMode的选项。 - Mulgard
您设置了datePickerDialog.getDatePicker().setCalendarViewShown(false);,但在API<11中无法正常工作。 - Apurva
我只支持API 17及以上的版本。只有版本21显示日历,其他版本不显示。 - Mulgard
可能是Android Material Design Inline Datepicker issue的重复问题。 - HaydenKai
2个回答

10

在我的 "values-v21/styles.xml" 文件中,我已修改了活动主题,如下所示,它隐藏了日历并显示了简单的日期选择器微调控件。你可能想要使用一个白色背景和圆角的可绘制对象:

    <item name="android:datePickerDialogTheme">@style/style_date_picker_dialog</item>
</style>


<style name="style_date_picker_dialog" parent="@android:style/Theme.DeviceDefault.Light">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowBackground">@drawable/dialog_background</item>
    <item name="android:datePickerStyle">@style/style_datepicker</item>
</style>

<style name="style_datepicker" parent="android:Widget.Material.Light.DatePicker">
    <item name="android:datePickerMode">spinner</item>
</style>

-1

这个问题已经在其他地方得到了解答:Android Material Design Inline Datepicker issue,而尝试使用被接受的答案来解决它并没有帮助我。

基本上你需要做的是:

<DatePicker
 ...
 android:datePickerMode="spinner" />

因为setCalandarShown();已经被弃用。


https://dev59.com/iVsW5IYBdhLWcg3wqYt7 - HaydenKai
可能会对@TashPemhiwa有所帮助,但目前这些东西似乎不太可靠,特别是当它们需要向后兼容时。 - HaydenKai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接