Einer App Auswahlelemente hinzufügen

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">
</ph> Beispiel für eine Zeitauswahl aus material.io <ph type="x-smartling-placeholder">
</ph> Abbildung 1: Auswahl der Stunden in einer mobilen Kalenderauswahl

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">
</ph> Beispiel für eine modale Datumsauswahl von material.io <ph type="x-smartling-placeholder">
</ph> Abbildung 2: Modale Datumsauswahl.

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 von TimePickerDialog.
  • 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 von DatePickerDialog.
  • 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:

  1. Erstellen Sie eine Klasse, die Werte von EditText übernimmt.
  2. Implementieren Sie die getAutofillType() , die AUTOFILL_TYPE_DATE zurückgibt.
  3. Implementieren Sie die getAutofillValue() , die ein Ereignis vom Typ AutofillValue -Objekt, das das Datum in Millisekunden darstellt. So erstellen Sie die Rückgabe -Objekt enthält, verwenden Sie die Methode forDate() Methode zum Generieren eines AutofillValue-Objekts.
  4. Implementieren Sie die autofill() . Diese Methode stellt die Logik für die Verarbeitung der Parameter AutofillValue vom Typ AUTOFILL_TYPE_DATE. Erstellen Sie zur Verarbeitung des Parameters Stringdarstellung davon, wie z. B. mm/yyyy. String verwenden Darstellung, um das Attribut text Ihrer Ansicht festzulegen.
  5. 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 Attribut text 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.