📜  在 Android 的 DatePicker 对话框中设置 MIN 和 MAX 可选日期

📅  最后修改于: 2022-05-13 01:54:19.695000             🧑  作者: Mango

在 Android 的 DatePicker 对话框中设置 MIN 和 MAX 可选日期

诸如旅行、剧院、电影、戏剧、约会、提醒等的票务预订等应用程序要求用户选择特定的日期或时间来确认时段或预订。在大多数这些应用程序中,要选择一项服务,然后用户必须选择一个插槽才能继续进行。此时,在选取日期时,一般会显示当前日历月或最近的可用日期。但是,并非所有日期都显示该时段的可用性。众所周知,过去的日期始终是灰色的,这意味着无法预订过去日期的时段。此外,如果服务提供商在未来某一天的时段数量有限或没有时段,则这些日期将显示为灰色。类似地,服务提供商也可以接受一系列日期的预订,他们可以相应地促进这一点。因此,在本文中,我们将向您展示如何显示日历并在其中选择一系列日期。 IDE 启动后,请按照以下步骤操作。

分步实施

第 1 步:在 Android Studio 中创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。我们在Kotlin中演示了该应用程序,因此请确保在创建新项目时选择 Kotlin 作为主要语言。

第 2 步:使用 activity_main.xml 文件

导航到app > res > layout > activity_main.xml并将以下代码添加到该文件。下面是activity_main.xml文件的代码。

XML




Kotlin
import android.app.DatePickerDialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import java.util.*
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Get instance of calendar
        // mCalendar will be set to current/today's date
        val mCalendar = Calendar.getInstance()
  
        // Creating a simple calendar dialog. 
          // It was 9 Aug 2021 when this program was developed.
        val mDialog = DatePickerDialog(this, { _, mYear, mMonth, mDay ->
            mCalendar[Calendar.YEAR] = mYear
            mCalendar[Calendar.MONTH] = mMonth
            mCalendar[Calendar.DAY_OF_MONTH] = mDay
        }, mCalendar[Calendar.YEAR], mCalendar[Calendar.MONTH], mCalendar[Calendar.DAY_OF_MONTH])
  
        // Changing mCalendar date from current to
          // some random MIN day 15/08/2021 15 Aug 2021
        // If we want the same current day to be the MIN day,
          // then mCalendar is already set to today 
          // and the below code will be unnecessary
        val minDay = 15
        val minMonth = 8
        val minYear = 2021
        mCalendar.set(minYear, minMonth-1, minDay)
        mDialog.datePicker.minDate = mCalendar.timeInMillis
  
        // Changing mCalendar date from current to
          // some random MAX day 20/08/2021 20 Aug 2021
        val maxDay = 20
        val maxMonth = 8
        val maxYear = 2021
        mCalendar.set(maxYear, maxMonth-1, maxDay)
        mDialog.datePicker.maxDate = mCalendar.timeInMillis
  
        // Display the calendar dialog
        mDialog.show()
  
    }
}


第 3 步:使用MainActivity.kt 文件

转到MainActivity.kt文件并参考以下代码。下面是MainActivity.kt文件的代码。代码中添加了注释以更详细地理解代码。

科特林

import android.app.DatePickerDialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import java.util.*
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Get instance of calendar
        // mCalendar will be set to current/today's date
        val mCalendar = Calendar.getInstance()
  
        // Creating a simple calendar dialog. 
          // It was 9 Aug 2021 when this program was developed.
        val mDialog = DatePickerDialog(this, { _, mYear, mMonth, mDay ->
            mCalendar[Calendar.YEAR] = mYear
            mCalendar[Calendar.MONTH] = mMonth
            mCalendar[Calendar.DAY_OF_MONTH] = mDay
        }, mCalendar[Calendar.YEAR], mCalendar[Calendar.MONTH], mCalendar[Calendar.DAY_OF_MONTH])
  
        // Changing mCalendar date from current to
          // some random MIN day 15/08/2021 15 Aug 2021
        // If we want the same current day to be the MIN day,
          // then mCalendar is already set to today 
          // and the below code will be unnecessary
        val minDay = 15
        val minMonth = 8
        val minYear = 2021
        mCalendar.set(minYear, minMonth-1, minDay)
        mDialog.datePicker.minDate = mCalendar.timeInMillis
  
        // Changing mCalendar date from current to
          // some random MAX day 20/08/2021 20 Aug 2021
        val maxDay = 20
        val maxMonth = 8
        val maxYear = 2021
        mCalendar.set(maxYear, maxMonth-1, maxDay)
        mDialog.datePicker.maxDate = mCalendar.timeInMillis
  
        // Display the calendar dialog
        mDialog.show()
  
    }
}

输出:

您可以看到我们只能从特定范围内选择日期。其余为灰色。