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 其它空间的风格。

posted on 2011-12-15 20:46  封起De日子  阅读(114)  评论(0编辑  收藏  举报

导航