Home / Programmazione / Java Android / Android DatePicker
Mattepuffo

Android DatePicker

Android DatePicker

I DatePicker sono dei componenti molto comodi per rappresentare le date, e li possiamo ormai trovare su qualsiasi software Web, Desktop o Mobile che sia.

Oggi vediamo come usare questo componente in Android.

Prima di tutto aggiuntetelo al lyout della vostra Activity:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/app_theme"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="fill_parent"
        android:layout_height="110dp"
        android:calendarViewShown="false" />

     <Button
            android:id="@+id/btn_up"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/btn" />

</LinearLayout>

Controllate quali opzioni fanno per voi ovviamente.

Ho messo anche un Button per impostarci sopra un evento di lettura della data scelta.

Poi nella nostra Avtivity:

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_er);
        DatePicker datePicker = (DatePicker) findViewById(R.id.date_picker);
        Button btnLogin = (Button) findViewById(R.id.btn);
        btnLogin.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                String date = DateFormat.format("yyyy-MM-dd", datePicker.getCalendarView().getDate()).toString();
                System.out.println(date);
            }
        });
    }

}

Al click sul Button trasformo la data scelta in stringa e la formatto come voglio usando un oggetto DateFormat.

Se invece vogliamo impostare una data precisa in apertura di Activity:

public class MyActivity  extends Activity {
    
    private Intent intent = null;
    private DatePicker datePicker = null;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_item);
        intent = getIntent();
        try {
            setDateOnDatePicker(intent.getStringExtra("data"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
     
    private void setDateOnDatePicker(String strDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
        Date date = sdf.parse(strDate);
        datePicker = (DatePicker) findViewById(R.id.date_picker);
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        datePicker.init(year, month, day, null);
    }

}

In questo caso passo la data da un'altra Activity, e per prendere il valore uso Intent.getStringExtra.

Nel metodo privato setDateOnDatePicker prima trasformo la data che mi arriva in formato stringa in un oggetto di tipo Date, formattato attraverso SimpleDateFormat.

Poi istanzio un oggetto Calendar e imposto il tempo sulla data parsata in precedenza.

Dall'oggetto Calendar estraggo giorno, mese e anno e li passo al metodo init di DatePicker per inizializzarlo su quella data.

Ciao!!