2010年12月28日火曜日

【android アプリ 開発】 TimePicker 作成








■TimePicker 作成

TimePickerは時間が選択できるウィジェットです。

1.次のようにEclipseから新しいプロジェクトを生成します。


2.res -> layout -> main.xmlファイルのソースコードを修正します。


3.HelloTimePicker.javaを編集します。


package my.HelloTimePicker;

import java.util.Calendar;

import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;

public class HelloTimePicker extends Activity {
    /** Called when the activity is first created. */
private TextView mTimeDisplay;
private Button mPickTime;

private int mHour;
private int mMinute;

static final int TIME_DIALOG_ID = 0;
@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();
}
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case TIME_DIALOG_ID:
        return new TimePickerDialog(this,
                mTimeSetListener, mHour, mMinute, false);
    }
    return null;
}
// updates the time we display in the TextView
private void updateDisplay() {
    mTimeDisplay.setText(
        new StringBuilder()
                .append(pad(mHour)).append(":")
                .append(pad(mMinute)));
}
// 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();
        }
    };
    
    private static String pad(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);
    }    
}



4.Run -> Run で実行します。

[ 実行結果 ]

* 実行画面で "change the time'ボタンを押すと TimePickerが表示されます。
次は修正したソースコードと実行結果です。


@Override
protected Dialog onCreateDialog(int id) {
     switch (id) {
         case TIME_DIALOG_ID:
             return new TimePickerDialog(this,
                 mTimeSetListener, mHour, mMinute, true);   // false -> true に変更。 AM, PM 選択ボタンなし
     }
     return null;
}


[ 実行結果 ]