不可能让我的 DatePickerDialog 以编程方式使用微调器样式

Posted

技术标签:

【中文标题】不可能让我的 DatePickerDialog 以编程方式使用微调器样式【英文标题】:Impossible to make my DatePickerDialog use a spinner style programmatically 【发布时间】:2015-08-11 03:42:11 【问题描述】:

我正在使用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);

但它不起作用。

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

【问题讨论】:

你所拥有的应该可以工作。让你走的东西嗯.... This answer 只用了一行代码。 【参考方案1】:

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

android Material Design Inline Datepicker issue

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

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

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

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

【讨论】:

【参考方案2】:

您可以以编程方式保留它,不需要使用微调器创建新的 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时忽略此命令

datePickerDialog.getDatePicker().setLayoutMode(1);

【讨论】:

如果您可以提供一个负按钮样式资源的示例来使用,可以吗?【参考方案3】:

&lt;item name="android:datePickerMode"&gt;spinner&lt;/item&gt;v21样式加一行

【讨论】:

【参考方案4】:

给它一个主题。

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));

【讨论】:

以上是关于不可能让我的 DatePickerDialog 以编程方式使用微调器样式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DatePickerDialog 中以越南语显示月份和日期?

对话框android中的datepickerdialog

Android - 在 datepickerdialog 中隐藏日期字段

如何从 datePickerDialog 中检索值?

datepickerdialog 隐藏日历并将我的日期选择器视图更改为标准模式

DatePickerDialog 结果返回到 Fragment?