【发布时间】:2021-07-15 14:32:33
【问题描述】:
我有一个基本的DatePicker,它是微调器样式,没有任何布局。它看起来像这样:
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 以数字方式显示月份(两位数格式)? 换句话说,它会显示为 03,而不是 Mar。理想情况下,如果可能的话,我希望避免实现自定义微调器。
【问题讨论】:
-
截图会很有帮助,有什么以及你想要实现什么。我猜你想在日历上将 Mar 更改为 03 对吧?
-
@HappySingh 是的,没错。
-
@HappySingh DatePicker,确切地说是微调器,而不是日历视图。
-
您需要获取月份选择器 ID。试试
view?.findViewById<NumberPicker?>(resources.getIdentifier("android:id/month", null, null))?.displayedValues = arrayOf("01","02" ....)onDateChanged(...) -
@StanislavBondar 不幸的是这不起作用。
标签: android kotlin android-datepicker