您的位置:首页 > 产品设计 > UI/UE

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
}
}


显示结果如下:




上图所显示的 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 其它空间的风格。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: