Pickers(选择器)
Posted yh_android_blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pickers(选择器)相关的知识,希望对你有一定的参考价值。
概述
安卓提供了现成的对话框,让用户选择一个时间或日期。每一个选择器控制时间(小时,分钟,AM/PM)或日期(月,日,年)的每一部分的选择。使用这些选择器帮助 确保用户正确的,格式化的,和适合的选择一个时间或日期。 我们推荐你使用DialogFragment
来容纳每一个时间或日期选择器。
DialogFragment
为你管理对话框的生命周期并且允许你在不同的布局结构中显示该选择器,例如 手机中的基本对话框或在大屏幕中作为一部分嵌入。
尽管
DialogFragment是在安卓3.0(API 11)才第一次出现,如果你的应用支持3.0更早的版本——即使是安卓1.6——你可以在
support library使用
DialogFragment 来向后兼容。
注:下面是示例代码展示了为
DialogFragment
使用
support library
API来如何
创建一个时间选择器和日期选择器。如果你的应用
minSdkVersion 是11或之上,你可以直接使用
DialogFragment
.。
创建一个时间选择器
使用 DialogFragment来展示一个时间选择对话框( TimePickerDialog ),你需要定义一个继承自 DialogFragment的 fragment 类,并且从该fragment的 onCreateDialog()方法中返回一个 TimePickerDialog。 注:如果你的应用支持的版本为比安卓3.0更老,确保你的安卓工程使用了 support library将 DialogFragment延伸为时间选择器(time picker)
为一个 TimePickerDialog 定义一个DialogFragment
,你必须:
- 定义
onCreateDialog()
来返回一个TimePickerDialog的引用
- 实现
TimePickerDialog.OnTimeSetListener
接口来响应用户设置时间的事件
查看 TimePickerDialog 类来了解更多关于该构造函数参数的信息 现在你所需要做的就是将这个fragment的实例添加到你的activity中。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
展示时间选择器
一旦你像上面一样定义了一个 DialogFragment,你可以通过创建该 DialogFragment的一个引用并且调用show()
.来展示该时间选择器。
一个例子,这里有一个按钮,当点击时,调用一个方法来显示该对话框:
当用户点击该按钮,系统调用了如下的方法:<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pick_time"
android:onClick="showTimePickerDialog" />
该方法调在一个新的 DialogFragment引用中调用了 show()。 show()方法需要一个 FragmentManager的引用和该fragment的唯一的标签名。 警告:如果你的应用支持安卓3.0及其以下版本,确保你在调用public void showTimePickerDialog(View v)
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getSupportFragmentManager(), "timePicker");
getSupportFragmentManager()
时获得了一个
FragmentManager
.的引用。也应该确保你展示该时间选择器的activity继承了
FragmentActivity而不是标准的
Activity
类。
创建日期选择器(Date Picker)
创建日期选择对话框( DatePickerDialog )和创建时间选择对话框(TimePickerDialog
.
)相似。唯一的不同将在于为对话框创建的fragment。
为使用
DialogFragment来展示一个
DatePickerDialog
,你需要定义一个继承自
DialogFragment
的
fragment类并且从fragment中的
onCreateDialog()方法中
返回一个
DatePickerDialog
注:如果你的应用支撑安卓3.0及更早的版本,确保你的工程中使用了安卓
support library
将DialogFragment 延伸为日期选择器(date picker)
为 DatePickerDialog 定义一个 DialogFragment,你必须:- 定义一个
onCreateDialog()
方法返回一个DatePickerDialog的引用
- 实现DatePickerDialog.OnDateSetListener接口来接收用户选择日期的事件
查看 DatePickerDialog类来 了解关于它构造函数参数的消息。 现在你只需要将这个fragment实例添加到你的activity中去了。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
展示日期选择器
一旦你像上面展示的一样定义了一个 DialogFragment,你可以通过创建一个 DialogFragment的引用再调用show()
来展示该日期选择器。
例如,这里有个按钮,当点击它时,调用一个方法来展示该对话框:
当用户点击该按钮,系统调用如下方法:<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pick_date"
android:onClick="showDatePickerDialog" />
该方法在一个新的 DialogFragment引用中调用public void showDatePickerDialog(View v)
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
show()
。
show()
方法要求有一个
FragmentManager的引用和fragment的唯一标签名。
警告:
如果你的应用支持安卓3.0及其以下版本,确保你在调用
getSupportFragmentManager()
时获得了一个
FragmentManager
.的引用。也应该确保你展示该时间选择器的activity继承了
FragmentActivity
而不是标准的
Activity
类。
以上是关于Pickers(选择器)的主要内容,如果未能解决你的问题,请参考以下文章