8

我正在使用 aDialogFragment打开一个DatePickerDialog

public class DatePickerFragment extends DialogFragment{

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);


    // Create a new instance of DatePickerDialog and return it
    DatePickerDialog DatePickerDialog = new DatePickerDialog(getActivity(), (ProfileCreationActivity)getActivity(), year, month, day);
    return DatePickerDialog;
}

我得到一个日历外观,我更喜欢微调器外观。

我试过了:

datePickerDialog.getDatePicker().setCalendarViewShown(false);

datePickerDialog.getDatePicker().setLayoutMode(1);

但它不起作用。

请注意,我希望微调器查找一项活动,但我希望日历视图用于另一项活动。所以我不能改变整个应用程序的风格。我需要一个活动的自定义样式。

4

4 回答 4

8

我在以下帖子中找到了解释(描述了一个与我非常相似的问题):

Android Material Design Inline Datepicker问题

事实上, setCalendarViewShown(false) 和 setSpinnerShown(true) 在最新版本中显然不再工作了。

我们必须使用一个显式的 XML 属性,比如android:datePickerMode="spinner"

问题是我使用的是没有任何 XML 布局的 DialogFragment(只是一个日期选择器对话框)。所以我不能设置任何 XML 属性。

解决方案是使用请求的属性创建一个带有 XML 布局文件的专用自定义对话框。

于 2015-07-12T15:36:56.903 回答
8

您可以以编程方式保留它,不需要使用微调器创建新的 XML,我只是更改了我的 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>

记住要保持对 <21 的支持,只需添加这一行,>=21 将忽略此命令

datePickerDialog.getDatePicker().setLayoutMode(1);
于 2016-09-02T12:42:33.297 回答
0

给它一个主题。

DatePickerDialog dpd = new DatePickerDialog(.this,
                    android.R.style.Theme_Holo_Light_Dialog_NoActionBar, expirationDatePickerDialog,
                    myCalendar.get(Calendar.YEAR),
                    myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH));
于 2022-01-11T09:48:27.620 回答
0

<item name="android:datePickerMode">spinner</item>只需在样式 v21 中添加一行

于 2020-02-05T11:53:57.703 回答