コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Androidアプリ入門 No.29 TimePickerDialog

TimePickerDialog

TimePickerDialogの基本

日付に続いて、時刻の選択ダイアログを確認する。まずは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/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="26sp"
        android:text=""
        />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="26sp"
        android:text="時刻を選択"
        />
</LinearLayout>

続いて、MainActivity.javaを以下のようにする。

package sample.at;

import java.util.Calendar;

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

public class MainActivity extends Activity {
    private TextView textView;
    private Button button;
    private int hour;
    private int minute;

    private static final int TIME_DIALOG_ID = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        textView = (TextView) findViewById(R.id.textView);
        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                showDialog(TIME_DIALOG_ID);
            }
        });

        Calendar c = Calendar.getInstance();
        hour = c.get(Calendar.HOUR_OF_DAY);
        minute = c.get(Calendar.MINUTE);

        updateDisplay();
    }

    private void updateDisplay() {
        textView.setText(new StringBuilder().append(hour).append("時").append(minute)
                .append("分"));
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case TIME_DIALOG_ID:
            return new TimePickerDialog(this, timeSetListener, hour, minute, true);
        }
        return null;
    }

    private OnTimeSetListener timeSetListener = new OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int selectMinute) {
            hour = hourOfDay;
            minute = selectMinute;

            updateDisplay();
        }
    };
}

実行結果は以下のようになる。

TimePickerDialogのコンストラクタは以下となる。

public TimePickerDialog (Context context,
    TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute,
    boolean is24HourView);

引数は以下。

引数 説明
context 親のコンテキスト。
callBack 時刻を設定したことを通知するリスナー。
hourOfDay ダイアログの時間の初期値。
minute ダイアログの分の初期値。
is24HourView 時刻を24時間表記にするか。trueは24時間表記。falseは午前、午後を選択する形となる。

表示したダイアログを選択した場合、上記のとおりOnTimeSetListenerでイベントを受け取る。ダイアログで「設定」ボタンが押された時にはOnTimeSetListenerのonTimeSetメソッドが呼び出される。メソッドの定義は以下の通り。

public abstract void onTimeSet (TimePicker view, int hourOfDay, int minute);

引数は以下。

引数 説明
view ダイアログのView
hourOfDay ダイアログで設定された時間。
minute ダイアログで設定された分。