日期、时间选择器(DatePicker和TimePicker)的功能与用法
DatePicker和TimePicker是两个比较易用的控件,它们都从FrameLayout派生而来,其中DatePicker供用户选择日期;而TimePicker则供用户选择时间。
DatePicker和TimePicker在FrameLayout的基础上提供了一些方法来获取当前用户所选择的日期、时间;如果程序需要获取用户选择的日期、时间,则可通过为DatePicker添加OnDateChangedListener进行监听、为TimePicker添加OnTimerChangedListener进行监听来实现。
实例:用户选择日期、时间
为了让用户能选择日期,本应用需要同时使用DatePicker和TimePicker两个组件,并为它们分别绑定监听器。下面是本应用的界面布局。
布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请选择买本书的具体时间"/> <!-- 定义一个DatePicker组件 --> <DatePicker android:id="@+id/datePicker" android:layout_width="wrap_content" android:layout_height="200dp" android:layout_gravity="center_horizontal" android:startYear="2000" android:endYear="2014" android:calendarViewShown="true" android:spinnersShown="true"/> <!-- 定义一个TimerPicker组件 --> <TimePicker android:id="@+id/timePicker" android:layout_width="wrap_content" android:layout_height="100dp" android:layout_gravity="center_horizontal"/> <!-- 显示用户输入日期、时间的控件 --> <EditText android:id="@+id/show" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:cursorVisible="false"/> </LinearLayout>
上面的界面布局中添加了一个DatePicker、一个TimePicker,这两个组件供用户选择日期、时间。除此之外,上面的界面布局中还包含一个EditText,该组件用于显示用户选择的日期时间。
主程序后台代码如下:
package org.crazyit.helloworld; import java.util.Calendar; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.DatePicker; import android.widget.DatePicker.OnDateChangedListener; import android.widget.EditText; import android.widget.TimePicker; import android.widget.TimePicker.OnTimeChangedListener; public class DataPickerTest extends Activity { //定义5个记录当前时间的变量 private int year; private int month; private int day; private int hour; private int minute; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.data_picker_test); DatePicker datePicker=(DatePicker)findViewById(R.id.datePicker); TimePicker timePicker=(TimePicker)findViewById(R.id.timePicker); //获取当前的年、月、日 、小时、分钟 Calendar c=Calendar.getInstance(); year=c.get(Calendar.YEAR); month=c.get(Calendar.MONTH); day=c.get(Calendar.DAY_OF_MONTH); hour=c.get(Calendar.HOUR); minute=c.get(Calendar.MINUTE); //初始化DatePicker组件,初始化时指定监听器 datePicker.init(year, month, day,new OnDateChangedListener(){ @Override public void onDateChanged(DatePicker view, int year, int month, int day) { // TODO Auto-generated method stub DataPickerTest.this.year=year; DataPickerTest.this.month=month; DataPickerTest.this.day=day; //显示当期日期、时间 showDate(year,month,day,hour,minute); } }); //为TimePicker指定监听器 timePicker.setOnTimeChangedListener(new OnTimeChangedListener(){ @Override public void onTimeChanged(TimePicker view, int hour, int minute) { // TODO Auto-generated method stub DataPickerTest.this.hour=hour; DataPickerTest.this.minute=minute; //显示当前日期、时间 showDate(year,month,day,hour,minute); } }); } //定义在EditText中显示当前日期、时间的方法 private void showDate(int year,int month,int day,int hour,int minute) { EditText show=(EditText)findViewById(R.id.show); show.setText("您的购买日期为:"+year+"年"+(month+1)+"月"+day+"日 "+hour +"时"+minute+"分"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.data_picker_test, menu); return true; } }
上面的程序中两行粗体字代码就是分别为DatePicker、TimerPicker绑定事件监听器的代码,DatePicker和TimePicker绑定事件监听器的方式略有不同,但本质还是一样的。一旦为DatePicker和TimePicker绑定了监听器,当用户通过这两个组件来选择日期、时间时,监听器被触发——监听器负责使用EditText来显示用户选择的日期、时间。
运行上面的程序将看到如图所示的效果: