【问题标题】:Impossible to make my DatePickerDialog use a spinner style programmatically不可能让我的 DatePickerDialog 以编程方式使用微调器样式
【发布时间】: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 只用了一行代码。

标签: android datepicker android-datepicker datepickerdialog


【解决方案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));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        相关资源
        最近更新 更多