O Android oferece controles para que o usuário escolha uma hora ou data como caixas de diálogo prontas para uso. Esses seletores oferecem controles para escolher parte do horário (hora, minuto, AM/PM) ou data (mês, dia, ano).
.O uso desses seletores ajuda a garantir que os usuários possam escolher um horário ou data válido, com o formato correto e ajustado para a localidade do usuário.
Recomendamos que você use
DialogFragment
para hospedar cada seletor de horário ou data. O DialogFragment
gerencia
ciclo de vida da caixa de diálogo e permite exibir seletores em diferentes layouts
configurações, como em uma caixa de diálogo básica em celulares ou como parte incorporada de
o layout em telas grandes.
Criar um seletor de horário
Para exibir um
TimePickerDialog
usando DialogFragment
, defina uma classe de fragmento que estenda
DialogFragment
e retornam um TimePickerDialog
do
do fragmento.
onCreateDialog()
.
Estender o DialogFragment para um seletor de horário
Para definir um DialogFragment
para um TimePickerDialog
,
faça o seguinte:
- Defina o método
onCreateDialog()
para retornar uma instância doTimePickerDialog
. - Implementar o
TimePickerDialog.OnTimeSetListener
para receber um callback quando o usuário definir o horário.
Veja um exemplo:
Kotlin
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener { override fun onCreateDialog(savedInstanceState: Bundle): Dialog { // Use the current time as the default values for the picker. val c = Calendar.getInstance() val hour = c.get(Calendar.HOUR_OF_DAY) val minute = c.get(Calendar.MINUTE) // Create a new instance of TimePickerDialog and return it. return TimePickerDialog(activity, this, hour, minute, DateFormat.is24HourFormat(activity)) } override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) { // Do something with the time the user picks. } }
Java
public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current time as the default values for the picker. final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); // Create a new instance of TimePickerDialog and return it. return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // Do something with the time the user picks. } }
Consulte a classe TimePickerDialog
para mais informações sobre a
argumentos do construtor.
Agora você só precisa de um evento que adicione uma instância desse fragmento ao seu atividades.
Mostrar o seletor de horário
Depois de definir um DialogFragment
como o do exemplo
exemplo, você pode exibir o seletor de horário criando uma instância do
DialogFragment
e chamar o método
show()
.
Por exemplo, aqui está um botão que, ao ser tocado, chama um método para mostrar o caixa de diálogo:
<Button android:id="@+id/pickTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick time" />
Quando o usuário toca nesse botão, o sistema chama o seguinte método:
Kotlin
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker") }
Java
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker"); }
Esse método chama show()
em uma nova instância do
DialogFragment
definido no exemplo anterior. A
O método show()
requer uma instância de
FragmentManager
e um nome de tag exclusivo para o fragmento.
Criar um seletor de data
Criar um
DatePickerDialog
é como criar um TimePickerDialog
. A diferença é que a caixa de diálogo
que você cria para o fragmento.
Para mostrar uma DatePickerDialog
usando DialogFragment
,
defina uma classe de fragmento que estenda DialogFragment
e retorne uma
DatePickerDialog
do onCreateDialog()
do fragmento.
.
Estender o DialogFragment para um seletor de data
Para definir um DialogFragment
para um DatePickerDialog
,
faça o seguinte:
- Defina o método
onCreateDialog()
para retornar uma instância doDatePickerDialog
. - Implementar o
DatePickerDialog.OnDateSetListener
para receber um retorno de chamada quando o usuário definir a data.
Veja um exemplo:
Kotlin
class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener { override fun onCreateDialog(savedInstanceState: Bundle): Dialog { // Use the current date as the default date in the picker. val c = Calendar.getInstance() val year = c.get(Calendar.YEAR) val month = c.get(Calendar.MONTH) val day = c.get(Calendar.DAY_OF_MONTH) // Create a new instance of DatePickerDialog and return it. return DatePickerDialog(requireContext(), this, year, month, day) } override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) { // Do something with the date the user picks. } }
Java
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current date as the default date in the picker. final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); // Create a new instance of DatePickerDialog and return it. return new DatePickerDialog(requireContext(), this, year, month, day); } public void onDateSet(DatePicker view, int year, int month, int day) { // Do something with the date the user picks. } }
Consulte a
DatePickerDialog
para informações sobre os argumentos do construtor.
Você só precisa de um evento que adicione uma instância desse fragmento ao seu atividades.
Mostrar o seletor de data
Depois de definir um DialogFragment
como o exemplo anterior,
você pode exibir o seletor de datas criando uma instância do
DialogFragment
e chamando show()
.
Por exemplo, aqui está um botão que, ao ser tocado, chama um método para mostrar o caixa de diálogo:
<Button android:id="@+id/pickDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick date"/>
Quando o usuário toca nesse botão, o sistema chama o seguinte método:
Kotlin
findViewById<Button>(R.id.pickDate).setOnClickListener { val newFragment = DatePickerFragment() newFragment.show(supportFragmentManager, "datePicker") }
Java
findViewById<Button>(R.id.pickDate).setOnClickListener { val newFragment = DatePickerFragment(); newFragment.show(supportFragmentManager, "datePicker"); }
Esse método chama show()
em uma nova instância do
DialogFragment
definido no exemplo anterior. A
O método show()
requer uma instância de FragmentManager
e um nome de tag exclusivo para o fragmento.
Usar seletores com o preenchimento automático
Em 2017, o Android lançou Estrutura de preenchimento automático, que permite os usuários salvam dados que podem ser usados para preencher formulários em diferentes apps. Seletores pode ser útil em situações de preenchimento automático, fornecendo uma interface que permite aos usuários alterar o valor de um campo que armazena dados de data ou hora. Por exemplo, em um cartão de crédito formulário, um seletor de data permite que os usuários insiram ou alterem a data de expiração do cartão de crédito.
Como os seletores são caixas de diálogo, eles não são exibidos em uma atividade junto
com outros campos. Para mostrar os dados do seletor quando ele não estiver visível, faça o seguinte:
usar outra visualização, como uma
EditText
,
que pode exibir o valor quando o seletor não estiver visível.
Um objeto EditText
espera nativamente o preenchimento automático de dados do tipo
AUTOFILL_TYPE_TEXT
.
Por outro lado, os serviços de preenchimento automático salvam os dados como
AUTOFILL_TYPE_DATE
para criar uma representação adequada dele. Para resolver a inconsistência em
tipos, recomendamos que você crie uma visualização personalizada herdada do
EditText
e implementa os métodos necessários para processar corretamente.
valores do tipo AUTOFILL_TYPE_DATE
.
Siga estas etapas para criar uma subclasse de EditText
que
pode manipular valores do tipo AUTOFILL_TYPE_DATE
:
- Crie uma classe herdada de
EditText
. - Implementar o
getAutofillType()
que retornaAUTOFILL_TYPE_DATE
. - Implementar o
getAutofillValue()
, que retorna umaAutofillValue
Objeto que representa a data em milissegundos. Para criar a devolução objeto, use o métodoforDate()
para gerar um objetoAutofillValue
. - Implementar o
autofill()
. Esse método fornece a lógica para lidar com o O parâmetroAutofillValue
, que é do tipoAUTOFILL_TYPE_DATE
. Para manipular o parâmetro, crie um objeto representação de string dele, comomm/yyyy
. Usar a string representação para definir a propriedadetext
da sua visualização. - Implemente a funcionalidade que exibe um seletor quando o usuário quer editar
a data na subclasse personalizada de
EditText
. A visualização é atualizada. a propriedadetext
com uma representação de string do valor que o usuário seleciona no seletor.
Para um exemplo de subclasse de EditText
que processa
AUTOFILL_TYPE_DATE
, consulte o exemplo da Estrutura de preenchimento automático em
Java
ou
Kotlin (em inglês).
Para saber mais sobre como provar a compatibilidade com o preenchimento automático para suas visualizações personalizadas, consulte Estrutura de preenchimento automático.