AndroidGUI05:DatePicker和TimePicker的常用技巧
1. 在布局文件 (main.xml) 中,增加界面元素生命如下:
< DatePicker
android:id = "@+id/date_picker"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
/>
< TimePicker
android:id = "@+id/time_picker"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
/>
< TextView
android:id = "@+id/text"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
/>
2. Activity 所对应的代码如下:
public class ControlDateTime extends Activity
implements
OnDateChangedListener,
OnTimeChangedListener
{
private DatePicker date ;
private TimePicker time ;
private TextView text ;
@Override
public void onCreate(Bundle savedInstanceState)
{
super .onCreate(savedInstanceState);
setContentView(R.layout. main );
date = (DatePicker)findViewById(R.id. date_picker );
time = (TimePicker)findViewById(R.id. time_picker );
text = (TextView)findViewById(R.id. text );
button .setOnClickListener( this );
// 对于 DatePicker 需要通过 init 方法 , 给其设置 OnDateChangedListener
date .init( date .getYear(), date .getMonth(), date .getDayOfMonth(), this );
time .setOnTimeChangedListener( this );
}
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
// year 减去 1900 , 是为了和 java.util.Date 兼容。比如 , 如果 year = 2011 , 如果不传入 2011 - 1900 , 而是直接传入
// 2011 的话 , 那么 dt.toString() 将输出的是 3911 。
Date dt = new Date(year - 1900, monthOfYear, dayOfMonth, time .getCurrentHour(), time .getCurrentMinute());
text .setText(dt.toString());
Log.e ( "d_onDateChanged" , " " + monthOfYear); // 输出的总比实际的少 1 。比如 5 月份 , 会输出 4
}
public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
{
// 见 onDateChanged 中的解释
Date dt = new Date( date .getYear() - 1900, date .getMonth(), date .getDayOfMonth(), hourOfDay, minute);
text .setText(dt.toString());
Log.e ( "d_onTimeChanged" , " " + date .getMonth()); // 输出的总比实际的少 1 。比如 5 月份,会输出 4
}
}
显示结果如下:
上图所显示的 3911 就是因为给 Date 的构造函数的第一个参数未见减去 1900 所造成的结果。
注意:
用 dp.init(2009, 5, 17, null); 为 DatePicker 对象 dp 设置初始值,显示出来的结果月份将为 “JUN” ,原因就是 “monthOfYear The
month that was set (0-11) ”
DatePicker 几处不妥:
1. 缺省的界面过大,对于手持终端而言尤其如此;
2. init 方法中和实际的月份总是相差 1 ;
3. 必须要用 init 方法来设置 OnDateChangedListener ,不符合 Android 其它空间的风格。