ב-Android יש פקדים שמאפשרים למשתמשים לבחור שעה או תאריך תיבות דו-שיח מוכנות לשימוש. הבוררים האלה מספקים אמצעי בקרה לבחירה חלק מהזמן (שעה, דקה, AM/PM) או תאריך (חודש, יום, שנה).
השימוש בבוררים האלה עוזר להבטיח שהמשתמשים שלך יוכלו לבחור שעה או תאריך תקין, בפורמט הנכון ושהוא מותאם ללוקאל של המשתמש.
מומלץ להשתמש
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
:
- יוצרים מחלקה יורשת מה-
EditText
. - ליישם את
getAutofillType()
, שתחזירAUTOFILL_TYPE_DATE
. - ליישם את
getAutofillValue()
, שמחזירהAutofillValue
שמייצג את התאריך באלפיות השנייה. כדי ליצור את ההחזרה לאובייקט, משתמשיםforDate()
כדי ליצור אובייקטAutofillValue
. - ליישם את
autofill()
. השיטה הזאת מספקת את הלוגיקה לטיפול פרמטרAutofillValue
, מסוגAUTOFILL_TYPE_DATE
. כדי לטפל בפרמטר, צריך ליצור ייצוג שלו במחרוזת, למשלmm/yyyy
. שימוש במחרוזת כדי להגדיר את המאפייןtext
של התצוגה המפורטת. - הטמעה של פונקציונליות שמציגה בורר כשהמשתמש רוצה לערוך
התאריך במחלקת המשנה המותאמת אישית של
EditText
. התצוגה מתעדכנת המאפייןtext
עם ייצוג מחרוזת של הערך שהמשתמש בוחר בבורר.
דוגמה למחלקה משנית של EditText
שמטפלת
הערכים של AUTOFILL_TYPE_DATE
, אפשר לראות דוגמה של 'מסגרת המילוי האוטומטי'
Java
או
קוטלין.
אפשר לקרוא מידע נוסף על הוכחת תמיכה במילוי אוטומטי בתצוגות בהתאמה אישית. מסגרת למילוי אוטומטי.