我有一个基本的DatePicker
,它是spinner风格的,没有任何布局。它看起来像这样:
class DatePickerFragment: DialogFragment(), DatePickerDialog.OnDateSetListener {
private lateinit var date: Date
interface Callbacks {
fun onDateSelected(date: Date)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
date = arguments?.getSerializable(ARG_DATE) as Date
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val calendar = Calendar.getInstance().apply {
time = date
}
val initialYear = calendar.get(Calendar.YEAR)
val initialMonth = calendar.get(Calendar.MONTH)
val initialDay = calendar.get(Calendar.DAY_OF_MONTH)
return DatePickerDialog(
requireContext(),
this,
initialYear,
initialMonth,
initialDay
)
}
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
val selectedDate = GregorianCalendar(year, month, dayOfMonth).time
targetFragment?.let { fragment ->
(fragment as Callbacks).onDateSelected(selectedDate)
}
}
companion object {
fun getInstance(date: Date): DatePickerFragment {
return DatePickerFragment().apply {
arguments = Bundle().apply {
putSerializable(ARG_DATE, date)
}
}
}
}
}
private const val ARG_DATE = "date"
选择器正常工作。问题是它显示月份名称(三个字母的格式),请参阅:
**如何使DatePicker以数字形式显示月份(两位数格式)?**换句话说,它将显示为Mar
而不是03
。理想情况下,如果可能,我希望避免实现自定义微调器。
1条答案
按热度按时间h22fl7wq1#
通过从DatePicker中查找月份NumberPicker并将显示的值设置为数字字符串,可以实现此目的。
进行以下更改:
1.使用如下自定义样式在
onCreateDialog(savedInstanceState: Bundle?)
中创建DatePickerDialog:其中
R.style.MyDatePickerDialogStyle
是自定义样式,用于设置微调器样式,如下所示:2.使用
DatePickerFragment
中的以下帮助函数将month设置为数字,如下所示:结果: