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

Time Picker

可以用TimePicker窗口小部件来选择时间,这个小部件允许用户选择小时和分钟。

本教程里,点击界面上的按钮,将弹出一个浮动的时间选择器对话框TimePickerDialog。当用户设置时间后,TextView将显示刚设的时间。

  1. 创建一个公车:HelloTimePicker.
  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/timeDisplay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""/>
        <Button android:id="@+id/pickTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Change the time"/>
    </LinearLayout>

    这是一个基本的LinearLayout布局,里面的TextView显示时间,点击Button则打开TimePickerDialog时间选择器对话框。

  3. 打开HelloTimePicker.java并添加下列成员变量:
        private TextView mTimeDisplay;
        private Button mPickTime;
    
        private int mHour;
        private int mMinute;
    
        static final int TIME_DIALOG_ID = 0;

    这些成员变量是布局元素、时分。TIME_DIALOG_ID 是静态整型值,作为时间选择器对话框的ID。

  4. 修改onCreate()如下:
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // capture our View elements
            mTimeDisplay = (TextView) findViewById(R.id.timeDisplay);
            mPickTime = (Button) findViewById(R.id.pickTime);
    
            // add a click listener to the button
            mPickTime.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    showDialog(TIME_DIALOG_ID);
                }
            });
    
            // get the current time
            final Calendar c = Calendar.getInstance();
            mHour = c.get(Calendar.HOUR_OF_DAY);
            mMinute = c.get(Calendar.MINUTE);
    
            // display the current date
            updateDisplay();
        }

    首先,加载main.xml布局文件,然后调用findViewById(int)来获得对TextView和Button的引用,

    接着给Button添加一个点击事件监听器View.OnClickListener,因此当点击Button后,

    回调函数showDialog(int)(参数是对话框ID)将被调用来显示时间选择器对话框。

    showDialog(int)方法让当前Activity管理对话框的生命周期,

    同时调用onCreateDialog(int) 回调函数显示对话框。

    在设置点击事件监听器以后,创建一个Calendar对象,读取当前小时、分钟。

    最后,调用updateDisplay() 方法,让TextView显示当前时间。

  5. 添加updateDisplay()pad()方法:
    // updates the time we display in the TextView
    private void updateDisplay() {
        mTimeDisplay.setText(
            new StringBuilder()
                    .append(pad(mHour)).append(":")
                    .append(pad(mMinute)));
    }
    
    private static String pad(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);
    }

    updateDisplay() 方法用时分成员变量的值设置mTimeDisplay TextView。pad()方法将个位数前面加0.

  6. 添加成员 TimePickerDialog.OnTimeSetListener,它将在用户设置时间的时候被调用:
    // the callback received when the user "sets" the time in the dialog
    private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHour = hourOfDay;
                mMinute = minute;
                updateDisplay();
            }
        };

    当用户设置好时间(点击"Set" (“设置”)按钮),onTimeSet() 方法会被调用来更新成员变量时分的值,并更新TextView显示的内容。

  7. 添加onCreateDialog(int)回调函数:
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case TIME_DIALOG_ID:
            return new TimePickerDialog(this,
                    mTimeSetListener, mHour, mMinute, false);
        }
        return null;
    }

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

  8. 运行应用。

当你按下"Change the time"(“更改时间”)按钮,会看到以下画面:

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

导航