步骤一:创建下拉菜单/日历日期选择器布局
.../main/res/layout/spinner_date_picker_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:calendarViewShown="false" />
.../main/res/layout/calendar_date_picker_layout.xml
可以找到日历日期选择器的布局文件。
<?xml version="1.0" encoding="utf-8"?>
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="calendar" />
步骤二:设置TextView的可点击行为以显示日期对话框。
.../main/res/layout/activity_layout.xml
<TextView
android:id="@+id/dateText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:clickable="true"
android:text="Date"
android:onClick="@{() -> viewModel.onClickDate()}"></TextView>
步骤三:在onClickDate上显示对话框
override fun onClickDate() {
showDialogForDate()
}
步骤四:将日期选择器布局设置为对话框视图。
private fun showDialogForDate() {
val spinnerDatePicker = layoutInflater.inflate(R.layout.spinner_date_picker_layout, null)
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
when (which) {
DialogInterface.BUTTON_POSITIVE -> {
activity!!.dateText.text = spinnerDatePicker.datePicker.dayOfMonth.toString() + "/" + (spinnerDatePicker.datePicker.month + 1) + "/" + spinnerDatePicker.datePicker.year
}
DialogInterface.BUTTON_NEGATIVE -> {
}
}
}
val builder = AlertDialog.Builder(context!!)
builder.setTitle(resources.getString(R.string.dialog_title))
.setView(spinnerDatePicker)
.setPositiveButton("Ok", dialogClickListener)
.setNegativeButton("Cancel", dialogClickListener)
.create()
.show()
}
android:datePickerMode="spinner"
会得到一个非常丑陋的警告:attribute "datePickerMode" is only used in API level 21 and higher (current min is 16)
。 - Mulgardtools:ignore="UnusedAttribute"
来消除警告。在 Android 5.0(Lollipop)之前的 API 级别中将忽略android:datePickerMode
属性。 - akhy