AndroidGUI05:DatePicker和TimePicker的常用技巧
2011-12-15 20:46
399 查看
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
}
}
显示结果如下:
![](http://hi.csdn.net/attachment/201105/10/0_13050196118AQg.gif)
上图所显示的 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 其它空间的风格。
< 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
}
}
显示结果如下:
![](http://hi.csdn.net/attachment/201105/10/0_13050196118AQg.gif)
上图所显示的 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 其它空间的风格。
相关文章推荐
- AndroidGUI05:DatePicker和TimePicker的常用技巧
- AndroidGUI05:DatePicker和TimePicker的常用技巧
- android 常用控件 (DatePicker) (TimePicker)
- android常用组件之DatePicker和TimePicker
- 系出名门Android(6) - 控件(View)之DatePicker, TimePicker, ToggleButton, EditText, Progre
- Android中实现日期时间选择器(DatePicker和TimePicker)
- Android DatePicker 和TimePicker
- 控件当前日期android控件之DatePicker和TimePicker
- Android之日期时间选择控件DatePicker和TimePicker实例
- Android月历控件(DatePicker)和时间控件(TimePicker)的使用
- Android控件之DatePicker、TimePicker探究
- Android DatePicker日期选择器、TimePicker时间选择器的使用
- Android新手——DatePicker和TimePicker
- Android入门笔记 - 界面开发 - RadioButton,CheckBox,Spinner,AutoCompleteTextView,DatePicker,TimePicker
- 【android基础学习之四】——基础控件CheckBox,Spinner,AutoCompleteTextView,DatePicker,TimePicker
- 【Android】时间与日期Widget(DatePicker 与 TimePicker)
- Android开发之DatePicker控件与TimePicker控件
- android常用UI使用案例:DatePicker和TimerPicker
- android *** Layout 10 DatePicker && TimePicker
- Android练习-----日期选择器(DatePicker) && 时间选择器(TimePicker)