Android 提供控制項,讓使用者選擇 立即可用的對話方塊這些挑選工具提供了控制選項,方便您選取各項工具 部分時間 (小時、分鐘、上午/下午) 或日期 (月、日、年)。
,瞭解如何調查及移除這項存取權。使用這些挑選工具可確保使用者能夠選擇有空的時間或日期 有效、格式正確,並已根據使用者的語言代碼進行調整。
建議您使用
DialogFragment
來代管個別時間或日期挑選器DialogFragment
會管理
的對話方塊生命週期,以及讓您在不同版面配置中顯示挑選器
例如手機的基本對話方塊或嵌入
以便大型螢幕顯示版面配置
建立時間挑選器
如要顯示
TimePickerDialog
請使用 DialogFragment
,定義可擴充的片段類別
DialogFragment
並傳回 TimePickerDialog
片段的
onCreateDialog()
方法。
擴充時間挑選器的 DialogFragment
如要為 TimePickerDialog
定義 DialogFragment
,
:
- 定義
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
類別,瞭解
建構函式引數。
現在,您只需要一個新增此片段執行個體的事件至您的 活動。
顯示時間挑選器
定義 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
。
show()
方法需要
FragmentManager
和片段的專屬標記名稱
建立日期挑選器
建立
DatePickerDialog
就像建立 TimePickerDialog
差別在於
您為片段建立的函式。
如要使用 DialogFragment
顯示 DatePickerDialog
,
定義擴充 DialogFragment
並傳回
來自片段 onCreateDialog()
的 DatePickerDialog
方法。
擴充日期挑選器的 DialogFragment
如要為 DatePickerDialog
定義 DialogFragment
,
:
- 定義
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
類別。
只需要一個事件,將此片段的例項新增至 活動。
顯示日期挑選器
按照上述範例定義 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
。
show()
方法需要 FragmentManager
的例項
和片段的專屬標記名稱
使用具有自動填入功能的挑選器
Android 在 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
的自訂子類別中編輯日期時,顯示挑選器。檢視畫面更新text
屬性,其值為字串表示法 使用者在挑選器上選取的設定。
針對處理的 EditText
子類別範例
AUTOFILL_TYPE_DATE
值,請參閱
Java
或
Kotlin。
如要進一步瞭解如何為自訂檢視區塊提供自動填入支援,請參閱 自動填入架構: