不可能让我的 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】:<item name="android:datePickerMode">spinner</item>
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 中隐藏日期字段