Android bietet Steuerelemente, mit denen Nutzer eine Uhrzeit oder ein Datum auswählen können, sofort einsatzbereite Dialogfelder. Mit diesen Auswahlmöglichkeiten können Sie die einzelnen einen Teil der Zeit (Stunde, Minute, AM/PM) oder Datum (Monat, Tag, Jahr).
<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">Mit dieser Auswahl können Nutzer eine Uhrzeit oder ein Datum auswählen, ist gültig, richtig formatiert und an die Sprache des Nutzers angepasst.
<ph type="x-smartling-placeholder">Wir empfehlen die Verwendung von
DialogFragment
zum Hosten der jeweiligen Uhrzeit- oder Datumsauswahl. DialogFragment
verwaltet das
Dialoglebenszyklus für Sie und ermöglicht es Ihnen, die Auswahl in einem anderen Layout anzuzeigen
zum Beispiel in einem einfachen Dialogfenster auf Mobiltelefonen oder als eingebetteter
das Layout auf großen Bildschirmen.
Zeitauswahl erstellen
Zum Anzeigen eines
TimePickerDialog
Definieren Sie mithilfe von DialogFragment
eine Fragmentklasse, die
DialogFragment
und geben TimePickerDialog
aus dem
des Fragments
onCreateDialog()
.
DialogFragment für eine Zeitauswahl erweitern
So definieren Sie eine DialogFragment
für eine TimePickerDialog
:
Gehen Sie so vor:
- Definieren Sie die Methode
onCreateDialog()
, um eine Instanz vonTimePickerDialog
. - Implementieren Sie die
TimePickerDialog.OnTimeSetListener
um einen Callback zu empfangen, wenn der Nutzer die Uhrzeit festlegt.
Beispiel:
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. } }
In der Klasse TimePickerDialog
finden Sie Informationen zu den
Konstruktor-Argumenten.
Jetzt brauchen Sie nur noch ein Ereignis, das eine Instanz dieses Fragments zu Ihrem Aktivitäten.
Zeitauswahl anzeigen
Nachdem Sie eine DialogFragment
wie im obigen Beispiel definiert haben,
können Sie zum Beispiel die Zeitauswahl anzeigen, indem Sie eine Instanz des
DialogFragment
und ruft die Methode
show()
.
Wenn Sie beispielsweise auf diese Schaltfläche tippen, wird eine Methode aufgerufen, Dialogfeld:
<Button android:id="@+id/pickTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick time" />
Wenn der Nutzer auf diese Schaltfläche tippt, ruft das System die folgende Methode auf:
Kotlin
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker") }
Java
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker"); }
Diese Methode ruft show()
für eine neue Instanz des
DialogFragment
wie im vorherigen Beispiel definiert. Die
Für die Methode show()
ist eine Instanz von
FragmentManager
und einen eindeutigen Tag-Namen für das Fragment.
Datumsauswahl erstellen
Ein
DatePickerDialog
ist wie ein TimePickerDialog
. Der Unterschied ist der Dialog
die Sie für das Fragment erstellen.
Um eine DatePickerDialog
mit DialogFragment
anzuzeigen,
definieren Sie eine Fragmentklasse, die DialogFragment
erweitert und einen
DatePickerDialog
aus dem onCreateDialog()
des Fragments
.
DialogFragment für eine Datumsauswahl erweitern
So definieren Sie eine DialogFragment
für eine DatePickerDialog
:
Gehen Sie so vor:
- Definieren Sie die Methode
onCreateDialog()
, um eine Instanz vonDatePickerDialog
. - Implementieren Sie die
DatePickerDialog.OnDateSetListener
verwendet, um einen Callback zu empfangen, wenn der Nutzer das Datum festlegt.
Beispiel:
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. } }
Weitere Informationen finden Sie in der
DatePickerDialog
-Klasse für Informationen zu den Konstruktorargumenten.
Sie benötigen lediglich ein Ereignis, mit dem eine Instanz dieses Fragments zu Ihrem Aktivitäten.
Datumsauswahl anzeigen
Nachdem Sie ein DialogFragment
wie im vorherigen Beispiel definiert haben,
können Sie die Datumsauswahl anzeigen, indem Sie eine Instanz des
DialogFragment
und show()
werden angerufen.
Wenn Sie beispielsweise auf diese Schaltfläche tippen, wird eine Methode aufgerufen, Dialogfeld:
<Button android:id="@+id/pickDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick date"/>
Wenn der Nutzer auf diese Schaltfläche tippt, ruft das System die folgende Methode auf:
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"); }
Diese Methode ruft show()
für eine neue Instanz des
DialogFragment
wie im vorherigen Beispiel definiert. Die
Für die Methode show()
ist eine Instanz von FragmentManager
erforderlich
und einen eindeutigen Tag-Namen für das Fragment.
Auswahl mit Autofill verwenden
2017 führte Android die neue Autofill-Framework, mit dem Nutzer speichern Daten, die in verschiedenen Apps zum Ausfüllen von Formularen verwendet werden können. Auswahl kann bei Autofill-Szenarien hilfreich sein, indem eine Benutzeroberfläche zur Verfügung gestellt wird, über die Nutzer die Wert eines Felds, das Datums- oder Uhrzeitdaten speichert. Beispiel: Bei einer Kreditkarte können Nutzer mit einer Datumsauswahl das Ablaufdatum ihrer Kreditkarte.
Da es sich bei der Auswahl um Dialogfelder handelt, werden sie nicht zusammen mit
anderen Felder. Wenn die Auswahldaten angezeigt werden sollen, wenn die Auswahl nicht sichtbar ist, haben Sie folgende Möglichkeiten:
eine andere Ansicht verwenden, z. B.
EditText
,
mit der der Wert angezeigt werden kann,
wenn die Auswahl nicht sichtbar ist.
Ein EditText
-Objekt erwartet nativ Autofill-Daten des Typs
AUTOFILL_TYPE_TEXT
.
Im Gegensatz dazu speichern Autofill-Dienste die Daten unter
AUTOFILL_TYPE_DATE
eine angemessene Darstellung
davon zu erstellen. Um die Inkonsistenz in
auswählen, empfehlen wir Ihnen, eine benutzerdefinierte Ansicht zu erstellen,
EditText
und implementiert die Methoden, die zur korrekten Verarbeitung
Werte des Typs AUTOFILL_TYPE_DATE
Führen Sie die folgenden Schritte aus, um eine abgeleitete Klasse von EditText
zu erstellen, die
kann Werte vom Typ AUTOFILL_TYPE_DATE
verarbeiten:
- Erstellen Sie eine Klasse, die Werte von
EditText
übernimmt. - Implementieren Sie die
getAutofillType()
, dieAUTOFILL_TYPE_DATE
zurückgibt. - Implementieren Sie die
getAutofillValue()
, die ein Ereignis vom TypAutofillValue
-Objekt, das das Datum in Millisekunden darstellt. So erstellen Sie die Rückgabe -Objekt enthält, verwenden Sie die MethodeforDate()
Methode zum Generieren einesAutofillValue
-Objekts. - Implementieren Sie die
autofill()
. Diese Methode stellt die Logik für die Verarbeitung der ParameterAutofillValue
vom TypAUTOFILL_TYPE_DATE
. Erstellen Sie zur Verarbeitung des Parameters Stringdarstellung davon, wie z. B.mm/yyyy
. String verwenden Darstellung, um das Attributtext
Ihrer Ansicht festzulegen. - Eine Funktion implementieren, die eine Auswahl anzeigt, wenn der Nutzer Änderungen vornehmen möchte
Das Datum in der benutzerdefinierten abgeleiteten Klasse von
EditText
. Die Ansicht wird aktualisiert das Attributtext
mit einer Stringdarstellung des Werts die der Nutzer in der Auswahl auswählt.
Ein Beispiel für eine abgeleitete Klasse von EditText
, die
AUTOFILL_TYPE_DATE
-Werte, siehe Beispiel für das Autofill-Framework in
Java
oder
Kotlin:
Weitere Informationen dazu, wie Sie nachweisen können, dass Autofill für Ihre benutzerdefinierten Ansichten unterstützt wird, finden Sie unter Autofill-Framework.