Android官方文档—User Interface(Input Controls)(Pickers)

选择器

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的实例和片段的唯一标记名称。

猜你喜欢

转载自blog.csdn.net/weixin_42703445/article/details/83861114
今日推荐