选择器
Android为用户提供控制选择时间或选择日期作为随时可用的对话框的控件。每个选择器提供控制以选择时间(小时,分钟,上午/下午)或日期(月,日,年)的每个部分。使用这些选择器有助于确保您的用户可以选择有效,格式正确的时间或日期,并根据用户的区域设置进行调整。
我们建议您使用DialogFragment托管每个时间或日期选择器。 DialogFragment为您管理对话框生命周期,并允许您以不同的布局配置显示选择器,例如在手机上的基本对话框中或在大屏幕上作为布局的嵌入部分。
虽然DialogFragment最初是在Android 3.0(API级别11)中添加到平台的,但如果您的应用程序支持早于3.0的Android版本 - 甚至低至Android 1.6 - 您可以使用支持库中提供的DialogFragment类来实现向后兼容性。
注意:下面的代码示例显示了如何使用DialogFragment的支持库API为时间选择器和日期选择器创建对话框。如果您的应用的minSdkVersion为11或更高,则可以使用DialogFragment的平台版本。
创建时间选择器
要使用DialogFragment显示TimePickerDialog,您需要定义一个扩展DialogFragment的片段类,并从片段的onCreateDialog()方法返回一个TimePickerDialog。
注意:如果您的应用支持早于3.0的Android版本,请确保使用支持库设置Android项目,如设置要使用库的项目中所述。
为时间选择器扩展DialogFragment
要为TimePickerDialog定义DialogFragment,您必须:
- 定义onCreateDialog()方法以返回TimePickerDialog的实例
- 实现TimePickerDialog.OnTimeSetListener接口以在用户设置时间时接收回调。
这是一个例子:
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 chosen by the user
}
}
有关构造函数参数的信息,请参阅TimePickerDialog类。
现在您只需要一个事件,将此片段的实例添加到您的活动中。
显示时间选择器
一旦定义了如上所示的DialogFragment,就可以通过创建DialogFragment的实例并调用show()来显示时间选择器。
例如,这是一个按钮,当单击它时,调用一个方法来显示对话框:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pick_time"
android:onClick="showTimePickerDialog" />
当用户单击此按钮时,系统将调用以下方法:
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getSupportFragmentManager(), "timePicker");
}
警告:如果您的应用程序支持低于3.0的Android版本,请确保调用getSupportFragmentManager()以获取FragmentManager的实例。还要确保显示时间选择器的活动扩展了FragmentActivity而不是标准的Activity类。
创建日期选择器
创建DatePickerDialog就像创建TimePickerDialog一样。唯一的区别是您为片段创建的对话框。
要使用DialogFragment显示DatePickerDialog,您需要定义一个扩展DialogFragment的片段类,并从片段的onCreateDialog()方法返回DatePickerDialog。
为日期选择器扩展DialogFragment
要为DatePickerDialog定义DialogFragment,您必须:
- 定义onCreateDialog()方法以返回DatePickerDialog的实例
- 实现DatePickerDialog.OnDateSetListener接口以在用户设置日期时接收回调。
这是一个例子:
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(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
}
}
有关构造函数参数的信息,请参阅DatePickerDialog类。
现在您只需要一个事件,将此片段的实例添加到您的活动中。
显示日期选择器
一旦定义了如上所示的DialogFragment,就可以通过创建DialogFragment的实例并调用show()来显示日期选择器。
例如,这是一个按钮,当单击它时,调用一个方法来显示对话框:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pick_date"
android:onClick="showDatePickerDialog" />
当用户单击此按钮时,系统将调用以下方法:
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
此方法在上面定义的DialogFragment的新实例上调用show()。 show()方法需要FragmentManager的实例和片段的唯一标记名称。