Pickers(选择器)

选择器

Android为用户提供了现成的选择时间或日期的对话框控件。每种选择器提供了可选择每一部分时间(时,分,上午/下午)或日期(月,日,年)的控件。使用这些选择器有助于确保用户可以选择有效的、格式正确的且适用于用户所在地区的时间或日期。

我们建议你使用 DialogFragment 来承载每个时间或日期选择器。DialogFragment 可以为你管理对话框的生命周期,并且可以以不同的布局配置显示选择器,例如在手机上时显示在基本对话框中,在大屏幕上时作为布局嵌入的一部分显示。

虽然 DialogFragment 直到Android 3.0 (API等级11)才被引入,但是如果你的应用支持Android 3.0以下的版本,甚至是Android 1.6版本,你仍然可以使用 support library 中获取的 DialogFragment 类来保证向后兼容。

注解:下面代码示例说明如何使用 support library APIS获取 DialogFragment 来为时间或日期选择器创建对话框。如果应用的 minSdkVersion 是11或更高的话,你可以直接使用平台提供的 DialogFragment

创建时间选择器


为了通过使用 DialogFragment 来显示 TimePickerDialog,你需要定义一个fragment类,它继承自 DialogFragment 且通过fragment的 onCreateDialog() 方法返回 TimePickerDialog

注解:如果你的应用支持Android 3.0以下的版本,请确保你的Android工程按照 Setting Up a Project to Use a Library 设置了支持库。

继承DialogFragment,创建时间选择器

要为 TimePickerDialog 定义一个 DialogFragment 的话,你必须:

下面是一个例子:

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);

        // 创建TimePickerDialog实例并返回
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // 用户选择时间后执行
    }
}

请查阅 TimePickerDialog 类了解更多关于构造方法参数的信息。

现在需要做的就是将该fragment的实例添加到你的activity中。

显示时间选择器

一旦你定义了一个如上所示的 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 实例。同时确保显示时间选择器的activity继承了 FragmentActivity 而不是 Activity

创建日期选择器


创建 DatePickerDialog 与创建 TimePickerDialog 过程类似。唯一的区别是为fragment创建的对话框不同。

为了通过使用 DialogFragment 来显示 DatePickerDialog,你需要定义一个fragment类,它继承自 DialogFragment 且通过fragment的 onCreateDialog() 方法返回 DatePickerDialog

注解:如果你的应用支持Android 3.0以下的版本,请确保你的Android工程按照 Setting Up a Project to Use a Library 设置了支持库。

继承DialogFragment,创建日期选择器

要为 DatePickerDialog 定义一个 DialogFragment 的话,你必须:

下面是一个例子:
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);

        // 创建DatePickerDialog的实例并返回
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // 用户选择日期后执行
    }
}

请查阅 DatePickerDialog 类了解更多关于构造方法参数的信息。

现在需要做的就是将该fragment的实例添加到你的activity中。

显示日期选择器

一旦你定义了一个如上所示的 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 的实例和这个fragment的唯一标签名。

注解:如果你的应用支持Android 3.0一下的版本,请确保你调用 getSupportFragmentManager() 来获取 FragmentManager 实例。同时确保显示时间选择器的activity继承了 FragmentActivity 而不是 Activity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值