הוספת בוררים לאפליקציה

ב-Android יש פקדים שמאפשרים למשתמשים לבחור שעה או תאריך תיבות דו-שיח מוכנות לשימוש. הבוררים האלה מספקים אמצעי בקרה לבחירה חלק מהזמן (שעה, דקה, AM/PM) או תאריך (חודש, יום, שנה).

דוגמה לבורר זמן מ-Material.io
איור 1. בחירת שעות בחלונית לבחירת יומן בנייד.

השימוש בבוררים האלה עוזר להבטיח שהמשתמשים שלך יוכלו לבחור שעה או תאריך תקין, בפורמט הנכון ושהוא מותאם ללוקאל של המשתמש.

דוגמה לבחירת תאריך מודאלי מ-material.io
איור 2. כלי לבחירת תאריכים במודל מודאלי.

מומלץ להשתמש DialogFragment כדי לארח כל אחת מבוררי התאריכים או השעה. DialogFragment מנהל את במחזור החיים של תיבת הדו-שיח, ומאפשרים להציג בוררים בפריסה שונה כגון בדיאל-שיח בסיסי על מכשירים ניידים או כחלק הפריסה במסכים גדולים.

יצירת בורר שעות

כדי להציג TimePickerDialog באמצעות DialogFragment, מגדירים מחלקה של מקטעים שמתרחבת DialogFragment ומחזירה TimePickerDialog מקטעים onCreateDialog() .

הרחבת DialogFragment לבורר זמן

כדי להגדיר DialogFragment עבור TimePickerDialog, לבצע את הפעולות הבאות:

  • מגדירים את ה-method onCreateDialog() כדי להחזיר מופע של TimePickerDialog.
  • ליישם את TimePickerDialog.OnTimeSetListener לקבל קריאה חוזרת כשהמשתמש מגדיר את השעה.

הנה דוגמה:

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.
    }
}

לקבלת מידע על הנושאים האלה, אפשר לעיין בכיתה TimePickerDialog של ה-constructor.

עכשיו צריך רק אירוע שמוסיף מופע של המקטע הזה פעילות.

הצגת בורר השעה

אחרי שמגדירים DialogFragment כמו זה שצוין למעלה לדוגמה, אפשר להציג את בורר השעה על ידי יצירת מופע של DialogFragment והתקשרות show() .

לדוגמה, הנה לחצן שכאשר מקישים עליו, הוא מפעיל שיטה כדי להציג תיבת דו-שיח:

<Button
    android:id="@+id/pickTime"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pick time" />

כשהמשתמש מקיש על הלחצן, המערכת מפעילה את השיטה הבאה:

Kotlin

findViewById<Button>(R.id.pickTime).setOnClickListener {
    TimePickerFragment().show(supportFragmentManager, "timePicker")
}

Java

findViewById<Button>(R.id.pickTime).setOnClickListener {
    TimePickerFragment().show(supportFragmentManager, "timePicker");
}

השיטה הזו מפעילה את show() במופע חדש של DialogFragment הוגדר בדוגמה שלמעלה. ל-method show() נדרש מופע של FragmentManager ושם תג ייחודי עבור המקטע.

יצירת חלונית לבחירת תאריך

יצירת DatePickerDialog הוא כמו יצירה של TimePickerDialog. ההבדל הוא בתיבת הדו-שיח שיוצרים עבור המקטע.

כדי להציג DatePickerDialog באמצעות DialogFragment, מגדירים מחלקה של מקטעים שמתרחבת את DialogFragment ומחזירה DatePickerDialog מה-onCreateDialog() של המקטע .

הרחבת DialogFragment לחלונית לבחירת תאריך

כדי להגדיר DialogFragment עבור DatePickerDialog, לבצע את הפעולות הבאות:

  • מגדירים את ה-method onCreateDialog() כדי להחזיר מופע של DatePickerDialog.
  • ליישם את DatePickerDialog.OnDateSetListener לקבל קריאה חוזרת כשהמשתמש מגדיר את התאריך.

הנה דוגמה:

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.
    }
}

לצפייה DatePickerDialog למידע על הארגומנטים של ה-constructor.

צריך רק אירוע שמוסיף מופע של המקטע הזה פעילות.

הצגת החלונית לבחירת תאריך

אחרי שמגדירים DialogFragment כמו בדוגמה שלמעלה, אפשר להציג את החלונית לבחירת תאריך על ידי יצירת מופע של DialogFragment ולהתקשר אל show().

לדוגמה, הנה לחצן שכאשר מקישים עליו, הוא מפעיל שיטה כדי להציג תיבת דו-שיח:

<Button
    android:id="@+id/pickDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pick date"/>

כשהמשתמש מקיש על הלחצן, המערכת מפעילה את השיטה הבאה:

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");
}

השיטה הזו מפעילה את show() במופע חדש של DialogFragment הוגדר בדוגמה שלמעלה. ל-method show() נדרש מופע של FragmentManager ושם תג ייחודי עבור המקטע.

שימוש בבוררים עם מילוי אוטומטי

ב-2017, Android השיקה מסגרת מילוי אוטומטי, שמאפשרת משתמשים שומרים נתונים שיכולים לשמש למילוי טפסים באפליקציות שונות. בוררים יכול להיות שימושי בתרחישים של מילוי אוטומטי, כי הוא מספק ממשק משתמש שמאפשר למשתמשים לשנות בשדה שמאחסן נתוני תאריך או שעה. למשל, בכרטיס אשראי הטופס הזה מאפשר למשתמשים להזין או לשנות את תאריך התפוגה של כרטיסי אשראי.

מאחר שבוררים הם תיבות דו-שיח, הם לא מוצגים בפעילות יחד עם שדות אחרים. כדי להציג את הנתונים של הבורר כשהוא לא גלוי, אפשר להשתמש בתצוגה אחרת, כמו EditText, הצגה של הערך גם כשלא רואים את הבורר.

אובייקט EditText מצפה במקור לנתוני מילוי אוטומטי מסוג AUTOFILL_TYPE_TEXT. לעומת זאת, שירותי המילוי האוטומטי שומרים את הנתונים בתור AUTOFILL_TYPE_DATE כדי ליצור ייצוג הולם שלו. כדי לפתור את חוסר העקביות מומלץ ליצור תצוגה מותאמת אישית שעברה בירושה EditText ומיישמים את השיטות הנדרשות כדי לטפל בצורה נכונה מסוג AUTOFILL_TYPE_DATE.

כדי ליצור מחלקה של EditText, צריך לפעול לפי השלבים הבאים יכול לטפל בערכים מסוג AUTOFILL_TYPE_DATE:

  1. יוצרים מחלקה יורשת מה-EditText.
  2. ליישם את getAutofillType() , שתחזיר AUTOFILL_TYPE_DATE.
  3. ליישם את getAutofillValue() , שמחזירה AutofillValue שמייצג את התאריך באלפיות השנייה. כדי ליצור את ההחזרה לאובייקט, משתמשים forDate() כדי ליצור אובייקט AutofillValue.
  4. ליישם את autofill() . השיטה הזאת מספקת את הלוגיקה לטיפול פרמטר AutofillValue, מסוג AUTOFILL_TYPE_DATE. כדי לטפל בפרמטר, צריך ליצור ייצוג שלו במחרוזת, למשל mm/yyyy. שימוש במחרוזת כדי להגדיר את המאפיין text של התצוגה המפורטת.
  5. הטמעה של פונקציונליות שמציגה בורר כשהמשתמש רוצה לערוך התאריך במחלקת המשנה המותאמת אישית של EditText. התצוגה מתעדכנת המאפיין text עם ייצוג מחרוזת של הערך שהמשתמש בוחר בבורר.

דוגמה למחלקה משנית של EditText שמטפלת הערכים של AUTOFILL_TYPE_DATE, אפשר לראות דוגמה של 'מסגרת המילוי האוטומטי' Java או קוטלין.

אפשר לקרוא מידע נוסף על הוכחת תמיכה במילוי אוטומטי בתצוגות בהתאמה אישית. מסגרת למילוי אוטומטי.