DatePicker
Man kann in das Layout einen DatePicker einfügen. Dieser wird von der Palette nicht angeboten. Also zieht man eine TextView in das Display und ändert den Typ von TextView auf DatePicker.Wie der DatePicker aussieht hängt von zwei Attributen ab.
- datePickerMode
- calendar: Es erscheint eine Kalender-Monatsübersicht, aus der man das Datum auswählen und Monat mit Jahr wechseln kann.
- spinner: Es erscheinen drei Rädchen für Monat, Tag und Jahr.
Darüber kann der Anwender sein Datum zusammenrollen.
Der Roller kann allein oder in Kombination mit einem Kalender erscheinen, je nachdem, ob das Attribut calendarViewShown auf true oder false steht. Roller und Kalender passen oft nicht nebeneinander auf das Display.
DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker); int day = datePicker.getDayOfMonth(); int month = datePicker.getMonth() + 1; int year = datePicker.getYear();Der DatePicker ist von seinen Ausmaßen leider ein wenig fett. Da hilft vielleicht die folgende Alternative.
Eingabefeld mit Popup-Kalender
In der Palette des Layout-Designers befindet sich unter Text auch ein Date. Das benötigt natürlich weniger Platz. Allerdings ist die Eingabe nicht sehr intuitiv. Man kann aber auf den Klick auf dieses Feld einen Date-Picker starten.- Das Date aus der Palette wird auf das Display gezogen.
- Das Attribut focusable wird auf false gestellt. Damit ist eine direkte Eingabe nicht mehr möglich.
- Unter hint kann man einen Hinweis darauf geben, dass hier ein Datum erfasst wird, also etwa "Datum erfassen".
Starten des Kalenders bei Berührung des Eingabefelds
- Das Eingabefeld wird referenziert und mit einem OnClickListener versehen. In der Methode onClick wird ein DatePickerDialog gestartet.
- Dieser wiederum benötigt einen OnDateSetListener für das Ereignis, wenn der Anwender bei der Datumsauswahl auf OK klickt.
- Dazu implementiert die Activity das Interface OnDateSetListener und muss darum deren Methode onDateSet implementieren.
- Diese Methode erhält die Datumsinformationen per Parameter und speichert diese in einem Calendar-Objekt namens calendar.
- Das Calendar-Objekt calendar ist ein privates Objekt der Klasse. Ihr Inhalt wird in dem Eingabefeld abgebildet. Das erledigt die private Methode updateDate, indem es das in calendar gespeicherte Datum in einen String umwandelt und damit das Eingabefeld füllt.
public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener { private Calendar calendar = Calendar.getInstance(); private EditText edDate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edDate = findViewById(R.id.editTextDate); updateDate(); edDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DatePickerDialog(MainActivity.this, MainActivity.this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show(); } }); } // Benötigt Zugriff auf calendar und edDate private void updateDate() { String myFormat = "yyyy-MM-dd"; SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault()); edDate.setText(sdf.format(calendar.getTime())); } @Override public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) { calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); updateDate(); } }