Aprenda a usar o DatePicker e TimePicker no Android (Kotlin)

DatePicker e TimePicker

Os elementos DatePicker e TimePicker são usados para recuperar uma data (Dia, Mês e Ano) e um tempo (Hora e Minuto)

Criando o ambiente

Neste primeiro momento, nós iremos trabalhar com o DatePicker e TimePicker dentro de uma caixa de diálogo, logo, não precisamos declarar nenhum elemento desse tipo dentro da nossa Activity.

Portanto, só iremos criar um grande TextView com o texto "Escolher Data" no centro da tela:

<TextView
android:id="@+id/meu_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="25sp"
android:gravity="center"
android:text="Escolher Data" />

Voltando para a sua classe de Activity, nós iremos adicionar um evento de listener ao nosso TextView, para que assim que ele for clicado, a caixa de diálogo do DatePicker/TimePicker se abra.

findViewById<TextView>(R.id.meu_text_view).setOnClickListener{
//Operações do Dialog acontecem aqui...
}

Feito isso, vamos continuar com nossos estudos.

DatePicker

O DatePicker é um elemento de calendário usado para selecionar datas.

Se tratando do DatePickerDialog, você pode chama-lo da seguinte forma:

findViewById<TextView>(R.id.meu_text_view).setOnClickListener{
DatePickerDialog(this, this, 2023, 8, 30).show()
}

Dentro do construtor da classe do DatePickerDialog, existem alguns parâmetros que devem ser informados em ordem:

context: Aqui passamos o contexto da aplicação que a caixa de diálogo será executada.

listener: Assim como em outros elementos, nós podemos implementar interfaces de resposta, para saber e recuperar a data que o usuário selecionou na caixa de diálogo.

year: O ano que o calendário vai selecionar como padrão assim que for aberto.

month: O mês que o calendário vai selecionar como padrão assim que for aberto.

dayOfMonth: O dia que o calendário vai selecionar como padrão assim que for aberto.

Por fim temos o método show() que é responsável por abrir a caixa de dialogo do tipo calendário na nossa tela.

Como configuramos o listener para this, estamos dizendo ao DatePickerDialog que estamos implementando os métodos de escuta dentro da nossa classe.

Nesse caso, precisamos fazer as devidas implementações da seguinte forma:

class MainActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener {
...
}

Não se esquecendo de atribuir os métodos obrigatórios:

override fun onDateSet(datepicker: DatePicker, year: Int, month: Int, dayOfMonth: Int) {
Log.d("Data Selecionada", "$dayOfMonth/${month+1}/$year")
}

onDateSet: Método chamado sempre quando o usuário seleciona uma data.

Sobre os parâmetros, acredito que eles são auto explicativos, não?

No caso do mês incrementado, é porque no caso do DatePickerDialog o mês de janeiro é representado por 0 em vez de 1 😒

Recuperando a data atual com Calendar

Você pode fazer o uso da classe Calendar para recuperar o ano, mês e dia atual diretamente do sistema do usuário, para isso basta usar os comandos abaixo:

val calendar = Calendar.getInstance()

val ano = calendar.get(Calendar.YEAR)
val mes = calendar.get(Calendar.MONTH)
val dia = calendar.get(Calendar.DAY_OF_MONTH)

Com esses dados em mãos, você pode trocar os números mágicos que você inseriu quando instanciou a classe do DatePickerDialog:

DatePickerDialog(this, this, ano, mes, dia).show()

Usando o elemento DatePicker

Além do DatePickerDialog, podemos inserir dentro do nosso arquivo XML um elemento do tipo <DatePicker>:

<DatePicker
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/datepicker_um" />

Para visualizar os atributos adicionais, não deixe de consultar a documentação.

TimePicker

O elemento TimerPicker é usado para recuperar a hora e os minutos.

E funciona de forma muito similar ao DatePicker, vejamos

findViewById<TextView>(R.id.meu_text_view).setOnClickListener{
TimePickerDialog(this, this, 20, 15, true).show()
}

Dentro do construtor da classe do TimePickerDialog, existem alguns parâmetros que devem ser informados em ordem:

context: Aqui passamos o contexto da aplicação que a caixa de diálogo será executada.

listener: Assim como em outros elementos, nós podemos implementar interfaces de resposta, para saber e recuperar a data que o usuário selecionou na caixa de diálogo.

hourOfDay: A hora do dia padrão que já vai estar selecionada.

minute: O minuto padrão que virá selecionado.

is24HourView: Se tiver marcado como true a visualização será no modo de 24 horas.

Por fim temos o método show() que é responsável por abrir a caixa de dialogo do tipo horário em nossa tela.

Como configuramos o listener para this, estamos dizendo ao TimePickerDialog que estamos implementando os métodos de escuta dentro da nossa classe.

Nesse caso, precisamos fazer as devidas implementações da seguinte forma:

class MainActivity : AppCompatActivity(), TimePickerDialog.OnTimeSetListener {
...
}

Não se esquecendo de atribuir seus métodos obrigatórios:

override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
TODO("Not yet implemented")
}

De acordo com o nome dos parâmetros, acredito que eles já são auto explicativos, não é verdade?

Recuperando a hora atual com o Calendar

Assim como fizemos anteriormente, também podemos fazer o uso da classe do Calendar de modo a recuperar a hora e o minuto atual do sistema do Android:

val rightNow = Calendar.getInstance()

val currentHourIn24Format: Int = rightNow.get(Calendar.HOUR_OF_DAY)

val currentHourIn12Format: Int = rightNow.get(Calendar.HOUR)

Usando o elemento TimePicker

Também podemos fazer o uso do elemento TimePicker a fim de importa-lo para dentro do seu arquivo XML:

<TimePicker
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

Consulte a documentação para visualizar os atributos desse elemento.

Conclusão

Neste conteúdo vimos o funcionamento dos elementos DatePicker e TimePicker em sua maneira mais simples.

Até o próximo conteúdo.