日期、时间选择器(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来显示用户选择的日期、时间。

      运行上面的程序将看到如图所示的效果:

posted @ 2013-10-28 09:33  TealerProg  Views(2749)  Comments(0Edit  收藏  举报