Xamarin Android - Apresentando o DatePicker


Neste artigo vou apresentar os conceitos básicos sobre o controle DatePicker do Xamarin Android usando o Visual Studio 2015 e a linguagem C#.

O Xamarin Android apresenta os controles DatePickerDatePickerDialog, que é um diálogo contendo um DatePicker, que permitem ao usuário informar datas em uma aplicação Android.

Enquanto o DatePicker permite aos usuários selecionar o ano, mês e dia em uma interface consistente entre dispositivos e aplicativos a classe DatePickerDialog é uma classe auxiliar que encapsula o selecionador de data em uma caixa de diálogo.

Em aplicações Android modernas devemos exibir o DatePickerDialog em um DialogFragment pois isso vai permitir que o aplicativo exiba o selecionador de datas como uma caixa de diálogo pop-up ou incorporado em uma atividade.

Além disso, o DialogFragment irá gerenciar o ciclo de vida e a exibição da caixa de diálogo, reduzindo a quantidade de código que deve ser implementado.

Neste artigo veremos inicialmente um exemplo básico de utilização do DatePicker e a seguir um exemplo onde podemos selecionar uma data e exibir a seleção no formato dd/mm/yyyy.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Exemplo 1- Usando o controle DatePicker

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual C# e o template Android -> Blank App(Android)

Informe o nome AppDateTimePicker e clique no botão OK;

Abra o arquivo Main.axml na pasta Resources/layout e no modo Designer.

Primeiro remova o controle Button que vem definido por padrão e a seguir inclua o seguinte controle a partir da ToolBox:

Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <DatePicker
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/dtp1" />
</LinearLayout>
 

A seguir abra o arquivo MainActivity.cs e altere o código desse arquivo conforme abaixo:

using Android.App;
using Android.OS;
using Android.Widget;
using System;
namespace AppDateTimePicker
{
    [Activity(Label = "AppDateTimePicker", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            DatePicker datePicker = FindViewById<DatePicker>(Resource.Id.dtp1);
            //Define a data para o 25 de maio de 2015
            datePicker.DateTime = new DateTime(2015, 05, 25, 23, 00, 00);
        }
    }
}

Neste código criamos uma instância do controle DatePicker definido no layout e criamos um objeto DateTime() usando um dos muitos construtores da classe DateTime.

Só para você ter uma ideia a seguir temos alguns dos construtores possíveis pela classe DateTime:

public DateTime()
public DateTime (long ticks, DateTimeKind kind)
public DateTime (int year, int month, int day, int hour, int minute, int second, Calendar calendar)
public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, DateTimeKind kind)
public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind)
public DateTime (int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)
public DateTime (int year, int month, int day)
public DateTime (long ticks)
public DateTime (int year, int month, int day, int hour, int minute, int second)
public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond)
public DateTime (int year, int month, int day, Calendar calendar)

Executando o projeto usando o emulador do Xamarin Android Player e emulando o KitKat(API 19) iremos obter o seguinte resultado:

Este exemplo é o mais trivial possível e não tem muita utilidade além de mostrar a cara do DatePicker().

Pegue o projeto completo aqui :  AppDateTimePicker.zip (sem as referências)

Exemplo 2- Selecionando datas com DatePicker

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual C# e o template Android -> Blank App(Android)

Informe o nome AppDatePicker_2 e clique no botão OK;

Abra o arquivo Main.axml na pasta Resources/layout e no modo Designer.

Primeiro remova o controle Button que vem definido por padrão e a seguir inclua o seguinte controle a partir da ToolBox:

Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#606060"
    android:minWidth="25px"
    android:minHeight="25px">
    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            android:orientation="vertical">
            <DatePicker
                android:id="@+id/dtp1"
                android:layout_width="wrap_content"
                android:layout_height="match_parent" />
            <Button
                android:id="@+id/btnMudaData"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Mudar Data" />
            <TextView
                android:id="@+id/txtViewData"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Mostrar data"
                android:textSize="20sp" />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

A seguir abra o arquivo MainActivity.cs e altere o código desse arquivo conforme abaixo:

using Android.App;
using Android.OS;
using Android.Widget;
using System;
using System.Text;
namespace AppDatePicker_2
{
    [Activity(Label = "AppDatePicker_2", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        DatePicker dtp1_Data;
        TextView txtData;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
            //cria instâncias dos objetos definidos no layout
            dtp1_Data = FindViewById<DatePicker>(Resource.Id.dtp1);
            var btnMudarData = FindViewById<Button>(Resource.Id.btnMudaData);
            txtData = FindViewById<TextView>(Resource.Id.txtViewData);
            //obtem a data no formato dd/mm/yyyy 
            txtData.Text = getData();
             //define o evento Click do botão
             btnMudarData.Click += BtnMudarData_Click;
        }
        private string getData()
        {
             //define um objeto stringbuilder para montar a data
            StringBuilder dataAtual = new StringBuilder();

            int mes = dtp1_Data.Month + 1;
            dataAtual.Append("Data : " + dtp1_Data.DayOfMonth + "/" + mes + "/" + dtp1_Data.Year);
            return dataAtual.ToString();
        }
        private void BtnMudarData_Click(object sender, EventArgs e)
        {
            txtData.Text = getData();
        }
    }
}

Executando o projeto iremos obter :

Agora podemos selecionar uma data usando o controle DatePicker e exibir a data selecionada no controle TextView.

Em outro artigo eu vou mostrar como usar o controle DatePicker com um DialogFragment.

Pegue o projeto completo aqui :   AppDatePicker_2.zip  (sem as referências)

Jesus Cristo é o mesmo, ontem, e hoje, e eternamente.
Hebreus 13:8

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti