在Android上的DatePicker中显示选定的日期范围(+作为标题)

在Android上的DatePicker中显示选定的日期范围(+作为标题),android,datepicker,Android,Datepicker,有人知道在Android DatePicker中是否可以: a允许用户仅选择给定的日期块。e、 用户点击W天,然后我们自动突出显示周-周日->周五-日期范围已选中 b在日期选择器的标题中,显示所选日期范围。 1月14日至19日,星期五 非常感谢任何人在这方面的帮助/建议 为了未来的读者 事实上,使用MaterialDatePicker可以实现新的目标。它是一个对话框,而不是像android.widget.DatePicker那样的自定义视图 台阶 一,。将材质相关性添加到模块的渐变文件中 二,。

有人知道在Android DatePicker中是否可以:

a允许用户仅选择给定的日期块。e、 用户点击W天,然后我们自动突出显示周-周日->周五-日期范围已选中

b在日期选择器的标题中,显示所选日期范围。 1月14日至19日,星期五

非常感谢任何人在这方面的帮助/建议

为了未来的读者

事实上,使用MaterialDatePicker可以实现新的目标。它是一个对话框,而不是像android.widget.DatePicker那样的自定义视图

台阶

一,。将材质相关性添加到模块的渐变文件中

二,。将应用程序主题更改为从材质主题的版本继承

例:

三,。使用以下代码启动该对话框


如果你不介意,请你接受我的回答。
implementation 'com.google.android.material:material:1.1.0-beta01'
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setupRangePickerDialog()

    }

    private fun setupRangePickerDialog() {
        val builderRange = MaterialDatePicker.Builder.dateRangePicker()

        builderRange.setCalendarConstraints(limitRange().build())
        val pickerRange = builderRange.build()
        pickerRange.show(supportFragmentManager, pickerRange.toString())
    }


    /*
    Limit selectable range to Oct 17 - Nov 20 2019
     */
    private fun limitRange(): CalendarConstraints.Builder {

        val constraintsBuilderRange = CalendarConstraints.Builder()

        val calendarStart: Calendar = Calendar.getInstance()
        val calendarEnd: Calendar = Calendar.getInstance()

        val year = 2019
        val startMonth = 10
        val startDate = 17

        val endMonth = 11
        val endDate = 20

        calendarStart.set(year, startMonth - 1, startDate - 1)
        calendarEnd.set(year, endMonth - 1, endDate)

        val minDate = calendarStart.timeInMillis
        val maxDate = calendarEnd.timeInMillis

        constraintsBuilderRange.setStart(minDate)
        constraintsBuilderRange.setEnd(maxDate)

        constraintsBuilderRange.setValidator(RangeValidator(minDate, maxDate))

        return constraintsBuilderRange
    }


}

class RangeValidator(private val minDate:Long, private val maxDate:Long) : CalendarConstraints.DateValidator{


    constructor(parcel: Parcel) : this(
        parcel.readLong(),
        parcel.readLong()
    )

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        TODO("not implemented")
    }

    override fun describeContents(): Int {
        TODO("not implemented")
    }

    override fun isValid(date: Long): Boolean {
        return !(minDate > date || maxDate < date)

    }

    companion object CREATOR : Parcelable.Creator<RangeValidator> {
        override fun createFromParcel(parcel: Parcel): RangeValidator {
            return RangeValidator(parcel)
        }

        override fun newArray(size: Int): Array<RangeValidator?> {
            return arrayOfNulls(size)
        }
    }

}