无法使我的DatePickerDialog以编程方式使用微调器样式

时间:2015-05-28 14:43:53

标签: android datepicker android-datepicker datepickerdialog

我使用DialogFragment打开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);

但它不起作用。

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

3 个答案:

答案 0 :(得分:8)

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

Android Material Design Inline Datepicker issue

事实上,setCalendarViewShown(false)和setSpinnersShown(true)在最新版本中显然不再有效。

我们必须使用像 android:datePickerMode =“spinner”这样的显式XML属性。

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

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

答案 1 :(得分:4)

你可以以编程方式保存它,不需要用微调器创建一个新的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>

记得保持对&lt; 21的支持只是添加这一行,&gt; = 21

忽略此命令
datePickerDialog.getDatePicker().setLayoutMode(1);

答案 2 :(得分:0)

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