Android کنترلهایی را برای کاربر فراهم میکند تا زمان یا تاریخ را به عنوان دیالوگهای آماده برای استفاده انتخاب کند. این انتخابگرها کنترل هایی را برای انتخاب هر قسمت از زمان (ساعت، دقیقه، AM/PM) یا تاریخ (ماه، روز، سال) فراهم می کنند.
استفاده از این انتخابکنندهها کمک میکند تا اطمینان حاصل شود که کاربران شما میتوانند زمان یا تاریخی را انتخاب کنند که معتبر است، بهدرستی قالببندی شده و با منطقه کاربر تنظیم شده است.
توصیه می کنیم از DialogFragment
برای میزبانی هر زمان یا انتخابگر تاریخ استفاده کنید. DialogFragment
چرخه عمر گفتگو را برای شما مدیریت می کند و به شما امکان می دهد انتخابگرها را در پیکربندی های مختلف چیدمان نمایش دهید، مانند یک گفتگوی اصلی در گوشی ها یا به عنوان بخشی جاسازی شده از طرح بندی در صفحه های بزرگ.
انتخابگر زمان ایجاد کنید
برای نمایش TimePickerDialog
با استفاده از DialogFragment
، یک کلاس قطعه تعریف کنید که DialogFragment
گسترش دهد و یک TimePickerDialog
را از متد onCreateDialog()
قطعه برگردانید.
DialogFragment را برای انتخابگر زمان گسترش دهید
برای تعریف یک DialogFragment
برای TimePickerDialog
، موارد زیر را انجام دهید:
- متد
onCreateDialog()
را برای برگرداندن نمونه ای ازTimePickerDialog
تعریف کنید. - رابط
TimePickerDialog.OnTimeSetListener
را برای دریافت پاسخ تماس زمانی که کاربر زمان را تنظیم می کند، پیاده سازی کنید.
در اینجا یک مثال است:
کاتلین
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. } }
جاوا
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
مراجعه کنید.
اکنون فقط به رویدادی نیاز دارید که نمونه ای از این قطعه را به فعالیت شما اضافه کند.
انتخابگر زمان را نشان دهید
بعد از اینکه یک DialogFragment
مانند مثال قبل تعریف کردید، می توانید با ایجاد یک نمونه از DialogFragment
و فراخوانی متد show()
انتخابگر زمان را نمایش دهید.
به عنوان مثال، در اینجا دکمه ای وجود دارد که با ضربه زدن روی آن، روشی برای نمایش دیالوگ فراخوانی می شود:
<Button android:id="@+id/pickTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick time" />
وقتی کاربر روی این دکمه ضربه می زند، سیستم روش زیر را فراخوانی می کند:
کاتلین
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker") }
جاوا
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker"); }
این متد show()
در یک نمونه جدید از DialogFragment
که در مثال قبل تعریف شده است فراخوانی می کند. متد show()
به یک نمونه از FragmentManager
و یک نام تگ منحصر به فرد برای قطعه نیاز دارد.
انتخابگر تاریخ ایجاد کنید
ایجاد یک DatePickerDialog
مانند ایجاد TimePickerDialog
است. تفاوت در گفتگوی است که برای قطعه ایجاد می کنید.
برای نمایش یک DatePickerDialog
با استفاده از DialogFragment
، یک کلاس قطعه تعریف کنید که DialogFragment
گسترش دهد و یک DatePickerDialog
از متد onCreateDialog()
قطعه برگردانید.
DialogFragment را برای انتخابگر تاریخ گسترش دهید
برای تعریف یک DialogFragment
برای DatePickerDialog
، موارد زیر را انجام دهید:
- متد
onCreateDialog()
را برای برگرداندن نمونه ای ازDatePickerDialog
تعریف کنید. - رابط
DatePickerDialog.OnDateSetListener
را پیاده سازی کنید تا زمانی که کاربر تاریخ را تنظیم می کند، پاسخ تماس دریافت کنید.
در اینجا یک مثال است:
کاتلین
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. } }
جاوا
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
مراجعه کنید.
شما فقط به یک رویداد نیاز دارید که نمونه ای از این قطعه را به فعالیت شما اضافه کند.
انتخابگر تاریخ را نشان دهید
بعد از اینکه یک DialogFragment
مانند مثال قبل تعریف کردید، می توانید انتخابگر تاریخ را با ایجاد نمونه ای از DialogFragment
و فراخوانی show()
نمایش دهید.
به عنوان مثال، در اینجا دکمه ای وجود دارد که با ضربه زدن روی آن، روشی برای نمایش دیالوگ فراخوانی می شود:
<Button android:id="@+id/pickDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick date"/>
وقتی کاربر روی این دکمه ضربه می زند، سیستم روش زیر را فراخوانی می کند:
کاتلین
findViewById<Button>(R.id.pickDate).setOnClickListener { val newFragment = DatePickerFragment() newFragment.show(supportFragmentManager, "datePicker") }
جاوا
findViewById<Button>(R.id.pickDate).setOnClickListener { val newFragment = DatePickerFragment(); newFragment.show(supportFragmentManager, "datePicker"); }
این متد show()
در یک نمونه جدید از DialogFragment
که در مثال قبل تعریف شده است فراخوانی می کند. متد show()
به یک نمونه از FragmentManager
و یک نام تگ منحصر به فرد برای قطعه نیاز دارد.
از انتخابگرها با تکمیل خودکار استفاده کنید
در سال 2017، اندروید چارچوب تکمیل خودکار را معرفی کرد که به کاربران امکان میدهد دادههایی را ذخیره کنند که میتوان از آنها برای پر کردن فرمها در برنامههای مختلف استفاده کرد. انتخابکنندهها میتوانند با ارائه یک رابط کاربری که به کاربران اجازه میدهد مقدار فیلدی را که دادههای تاریخ یا زمان را ذخیره میکند تغییر دهند، در سناریوهای تکمیل خودکار مفید باشند. به عنوان مثال، در فرم کارت اعتباری، انتخابگر تاریخ به کاربران اجازه می دهد تاریخ انقضای کارت اعتباری خود را وارد کرده یا تغییر دهند.
از آنجایی که انتخابگرها دیالوگ هستند، در یک فعالیت همراه با سایر فیلدها نمایش داده نمی شوند. برای نمایش دادههای انتخابگر زمانی که انتخابگر قابل مشاهده نیست، میتوانید از نمای دیگری مانند 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
ویرایش کند، یک انتخابگر را نمایش میدهد. View ویژگیtext
را با نمایش رشته ای از مقداری که کاربر در انتخابگر انتخاب می کند، به روز می کند.
برای مثالی از زیر کلاس EditText
که مقادیر AUTOFILL_TYPE_DATE
را کنترل می کند، نمونه چارچوب Autofill را در جاوا یا Kotlin ببینید.
برای کسب اطلاعات بیشتر در مورد اثبات پشتیبانی تکمیل خودکار برای نماهای سفارشی خود، به چارچوب تکمیل خودکار مراجعه کنید.