Pickers(选择器)

来源:互联网 发布:xp极限编程 编辑:程序博客网 时间:2024/05/16 07:24

概述

安卓提供了现成的对话框,让用户选择一个时间或日期。每一个选择器控制时间(小时,分钟,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 接口来响应用户设置时间的事件
这里有个例子:
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 类来了解更多关于该构造函数参数的信息
现在你所需要做的就是将这个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的唯一的标签名。
警告:如果你的应用支持安卓3.0及其以下版本,确保你在调用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接口来接收用户选择日期的事件
下面是个示例:
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类来了解关于它构造函数参数的消息。
现在你只需要将这个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的唯一标签名。
警告如果你的应用支持安卓3.0及其以下版本,确保你在调用getSupportFragmentManager() 时获得了一个FragmentManager.的引用。也应该确保你展示该时间选择器的activity继承了FragmentActivity而不是标准的Activity 类。







0 0
原创粉丝点击