Android
以现成的对话框的形式提供了支持用户选择时间或日期的控件。每个选择对话框提供了设置时间的各部分(小时,分钟和秒,上午/下午)或者日期的各个部分(月,日和年)。使用这些对话框可以确保你的用户能够选择一个有效的、形式正确,符合用户地域的时间或日期。
我们建议你使用DialogFragment
来包裹每一个时间或日期选择器。DialogFragment
为你管理对话框的生命周期,允许你在不同的布局配置中显示这些对话框,例如在移动电话界面中的基本对话框,或者是更大的屏幕的布局文件的嵌入部分。
尽管DialogFragment
在Android 3.0(API 11)
才被加入,如果你的应用程序的支持版本低于3.0
,甚至达到1.6
,你都可以使用为向后兼容而提供的支持库中的DialogFragment
类。
注意:下面的代码示例是显示如何使用支持库的DialogFragment
创建时间选择对话框和日期选择对话框。如果你的应用程序的minSdkVersion
是11或更高,你可以使用平台版本的DialogFragment
类。
创建一个时间选择对话框
为了使用DialogFragment
显示一个时间选择对话框,你需要定义一个继承自DialogFragment
的fragment
类,并在这个fragment
的onCreateDialog()
方法中返回TimePickerDialog
的一个实例。
创建继承自DialogFragment
的类
为了使用DialogFragment
显示一个时间选择对话框,你必须:
- 定义
onCreateDialog()
方法,并返回一个TimePickerDialog
的实例。 - 实现
TimePickerDialog.OnTimeSetListener()
接口以在用户设置时间时回调相应方法。
下面是一个例子:
public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// 使用当前时间作为时间选择对话框的默认值
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
//创建时间选择对话框的新实例并返回它
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// 当用户选择时间时执行
}
}
现在你需要做的就是为你的活动添加这个fragment
的实例。
显示时间选择对话框
一旦你向上面显示的那样定义了一个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");
}
这个方法调用上面定义的DialogFragment
的一个新实例的show()
方法。show()
方法需要一个FragmentManager
的实例和为这个fragment
指定的唯一的标签名。
小心:如果你的应用程序支持低于Android 3.0的版本,确保你调用getSupportFragmentManager()来获取FragmentManager的实例。也确保你的显示时间选择对话框的活动继承自FragmentActivity而不是标准的Activity类。
创建一个日期选择对话框
创建日期选择对话框和创建时间选择对话框一样。唯一的不同是你为fragment
创建的对话框。
为了使用DialogFragment
显示一个日期选择对话框,你需要定义一个继承自DialogFragment
的类并且在这个fragment
的onCreateDialog()
方法中返回一个DatePickerDialog
.
创建继承自DialogFragment
的类
为了为日期选择对话框定义一个DialogFragment
,你必须:
- 定义
onCreateDialog()
方法并返回DatePickerDialog
的一个实例 - 实现
DatePickerDialog.OnDateSetListener
接口以在用户设置日期时调用相应方法。
下面是一个例子:
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// 使用当前日期作为日期选择对话框的默认值
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);
// 创建日期选择对话框的一个实例并返回它
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// 当用户设置日期时执行
}
}
显示日期选择对话框
下面是一个按钮,当用户点击时,调用显示日期选择对话框的方法:
<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()
方法。该方法需要一个FragmentManager
实例和为这个fragment
指定的唯一的标签名。