Android应用程序用户界面(十一)时间日期选择对话框

本文详细介绍了如何在Android应用程序中创建和显示时间选择对话框及日期选择对话框,包括创建继承自`TimePickerDialogFragment`和`DatePickerDialogFragment`的类,以及在用户选择时间或日期时的回调实现。建议使用`DialogFragment`进行对话框管理,以适应不同屏幕配置。同时,提供了支持API 11以下版本的向后兼容解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android以现成的对话框的形式提供了支持用户选择时间或日期的控件。每个选择对话框提供了设置时间的各部分(小时,分钟和秒,上午/下午)或者日期的各个部分(月,日和年)。使用这些对话框可以确保你的用户能够选择一个有效的、形式正确,符合用户地域的时间或日期。

时间日期选择对话框

我们建议你使用DialogFragment来包裹每一个时间或日期选择器。DialogFragment为你管理对话框的生命周期,允许你在不同的布局配置中显示这些对话框,例如在移动电话界面中的基本对话框,或者是更大的屏幕的布局文件的嵌入部分。

尽管DialogFragmentAndroid 3.0(API 11)才被加入,如果你的应用程序的支持版本低于3.0,甚至达到1.6,你都可以使用为向后兼容而提供的支持库中的DialogFragment类。

注意:下面的代码示例是显示如何使用支持库的DialogFragment 创建时间选择对话框和日期选择对话框。如果你的应用程序的minSdkVersion是11或更高,你可以使用平台版本的DialogFragment类。

创建一个时间选择对话框

为了使用DialogFragment显示一个时间选择对话框,你需要定义一个继承自DialogFragmentfragment类,并在这个fragmentonCreateDialog()方法中返回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的类并且在这个fragmentonCreateDialog()方法中返回一个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指定的唯一的标签名。

原文

  1. http://wear.techbrood.com/guide/topics/ui/controls/pickers.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值