【问题标题】:DatePicker in a DialogFragment ignores setCalendarViewShownDialogFragment 中的 DatePicker 忽略 setCalendarViewShown
【发布时间】:2015-02-20 10:15:55
【问题描述】:

我想在 DialogFragment 中显示 DatePicker:

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"
  • 我以编程方式初始化我的日期选择器,它应该保持这样。以编程方式初始化时没有设置 datePickerMode 的选项
  • 您设置了datePickerDialog.getDatePicker().setCalendarViewShown(false);,这不适用于 API
  • 我只支持Api 17及以上。只有版本 21 显示日历。其他版本没有。

标签: android datepicker


【解决方案1】:

在我的“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>

【讨论】:

    【解决方案2】:

    这已在其他地方得到回答:Android Material Design Inline Datepicker issue,并试图用接受的答案解决它让我无处可去。

    基本上你需要做的:

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

    因为setCalandarShown(); 已被弃用。

    【讨论】:

    猜你喜欢
    • 2019-12-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多