[译文]Date Picker - Android SDK Tutorials系列

Date Picker

可以用DatePicker窗口小部件来选择日期,用户可以选择年月日。

本教程里,你将创建一个DatePickerDialog对话框,点击按钮会弹出一个悬浮的日期选择器对话框。当用户设置日期以后,一个TextView会显示刚设置的日期。

  1. 创建一个工程:HelloDatePicker.
  2. 打开 res/layout/main.xml并修改如下:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView android:id="@+id/dateDisplay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""/>
        <Button android:id="@+id/pickDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Change the date"/>
    </LinearLayout>

    采用LinearLayout布局,里面用一个TextView来显示日期,和一个Button,点击它会打开DatePickerDialog对话框。

  3. 打开HelloDatePicker.java,添加下列成员变量:
        private TextView mDateDisplay;
        private Button mPickDate;
        private int mYear;
        private int mMonth;
        private int mDay;
    
        static final int DATE_DIALOG_ID = 0;

    第一组变量定义了界面里的View(TextView、Button)以及日期的年月日。静态整数DATE_DIALOG_ID 是Dialog的ID,用来创建日期选择器。

  4. 修改onCreate()方法如下:
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // capture our View elements
            mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
            mPickDate = (Button) findViewById(R.id.pickDate);
    
            // add a click listener to the button
            mPickDate.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    showDialog(DATE_DIALOG_ID);
                }
            });
    
            // get the current date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);
    
            // display the current date (this method is below)
            updateDisplay();
        }

    首先,加载main.xml布局文件。然后使用findViewById(int)来引用TextView和Button。

    然后为Button设置一个 View.OnClickListener点击事件监听器,当Button被点击后,showDialog(int)方法会被调用,该方法创建一个ID为DATE_DIALOG_ID的日期选择器对话框。

    showDialog(int)方法让当前Activity管理对话框的生命周期,同时调用onCreateDialog(int) (将在下一步定义)回调函数显示对话框。

    在设置点击事件监听器以后,创建一个Calendar对象,读取当前年、月、日。最后,调用updateDisplay() 方法,让TextView显示当前日期。

     

  5. 定义updateDisplay()方法:
        // updates the date in the TextView
        private void updateDisplay() {
            mDateDisplay.setText(
                new StringBuilder()
                        // Month is 0 based so add 1
                        .append(mMonth + 1).append("-")
                        .append(mDay).append("-")
                        .append(mYear).append(" "));
        }

    这个方法用成员变量年月日的值设置TextView的显示内容;mDateDisplay, 也在前面声明和初始化过了。

  6. 创建一个新的成员变量DatePickerDialog.OnDateSetListener并初始化:
        // the callback received when the user "sets" the date in the dialog
        private DatePickerDialog.OnDateSetListener mDateSetListener =
                new DatePickerDialog.OnDateSetListener() {
    
                    public void onDateSet(DatePicker view, int year, 
                                          int monthOfYear, int dayOfMonth) {
                        mYear = year;
                        mMonth = monthOfYear;
                        mDay = dayOfMonth;
                        updateDisplay();
                    }
                };

    DatePickerDialog.OnDateSetListener 监听用户设置时间操作(用户点击“Set”("设置")按钮)。点击"Set"以后,onDateSet() 方法会被调用来更新mYear,mMonth, 和mDay的值,并调用updateDisplay()方法来更新TextView的显示内容。

  7. 现在添加onCreateDialog(int)回调函数:
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this,
                        mDateSetListener,
                        mYear, mMonth, mDay);
        }
        return null;
    }

    这是一个Activity回调函数,传递给它的整型ID来自 showDialog(int)方法(这个方法在按钮的View.OnClickListener监听器里被调用)的参数。当这个ID满足switch条件时,会使用按钮点击事件监听器View.OnClickListener(前面步骤里创建的)、年月日成员变量(用来初始化时间选择器窗口小部件的显示日期)来实例化一个DatePickerDialog (日期选择器对话框)。

  8. 运行应用。

当你按下"Change the date"(“更改日期”)按钮,会看到以下画面:

posted on 2011-12-08 12:23  OnionD  阅读(216)  评论(0编辑  收藏  举报

导航