【正社員】還元率83%【フリーランス】マージン一律5万円で案件をご紹介させていただきます。 詳細はこちら

【Android】Kotlinでアプリ画面にダイアログを出す方法② | DatePickerDialog, TimePickerDialog(日付、時刻選択)の実装について徹底解説

【Android】Kotlinでアプリ画面にダイアログを出す方法② | DatePickerDialog, TimePickerDialog(日付、時刻選択)の実装について徹底解説
すだ

みなさまこんにちは〜!
メモリアインクのすだです。

本日は、Kotlinでアプリ画面に
日付と時刻を選択できるダイアログを出す実装方法について
徹底解説していきます!

この記事を読んでわかること…
・DatePickerDialog(日付選択ダイアログ)の使い方
・TimePickerDialog(時刻選択ダイアログ)の使い方

ダイアログの基本的な表示方法については、以下の記事で詳しく紹介しています!
ぜひあわせてご覧くださいね!

目次

環境

  • Kotlin (ver 1.9.0)
  • Android Studio (Giraffe | 2022.3.1 Patch 3)

DatePickerDialogとは?(日付選択ダイアログ)

DatePickerDialogは、カレンダー形式でユーザーに日付を選んでもらうためのダイアログです。
選択された日付は年・月・日の形式で取得できます。

DatePickerDialogの基本的な使い方

それでは早速、日付選択のできるダイアログを実装していきましょう!

①まずは、ボタンとテキストビューを含むレイアウトの実装を行います。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <!-- 時刻選択ボタン -->
    <Button
        android:id="@+id/btnShowDatePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="時間を選択"
        android:layout_gravity="center_horizontal"
        android:padding="12dp" />

    <!-- 選択した時間を表示するTextView -->
    <TextView
        android:id="@+id/txtSelectedDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="選択した時間: 00:00"
        android:textSize="18sp"
        android:layout_gravity="center_horizontal"
        android:paddingTop="16dp" />

</LinearLayout>

②そして、上記作成したレイアウトを用いて ダイアログ部分を実装していきます。

import android.app.DatePickerDialog
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import java.util.Calendar

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnShowDatePicker = findViewById<Button>(R.id.btnShowDatePicker)
        val txtSelectedDate = findViewById<TextView>(R.id.txtSelectedDate)

        btnShowDatePicker.setOnClickListener {
            // カレンダーのインスタンスを作成し、初期値を現在の日付に設定
            val calendar = Calendar.getInstance()
            val year = calendar.get(Calendar.YEAR)
            val month = calendar.get(Calendar.MONTH)
            val day = calendar.get(Calendar.DAY_OF_MONTH)

            // DatePickerDialogを作成
            val datePickerDialog = DatePickerDialog(
                this,
                { _, selectedYear, selectedMonth, selectedDay ->
                    // 選択された日付をTextViewに表示
                    val date = "$selectedYear/${selectedMonth + 1}/$selectedDay"
                    txtSelectedDate.text = "選択した日付: $date"
                },
                year, month, day
            )

            // ダイアログを表示
            datePickerDialog.show()
        }
    }
}

1.// カレンダーのインスタンスを作成し、初期値を現在の日付に設定

Calendar クラスを使用して、現在の日付(年・月・日)を取得します。

YEAR:現在の「年」を取得
MONTH:現在の「月」を取得 → 0から始まるため、表示する際には「+1」が必要です。
DAY_OF_MONTH:現在の日付(日)を取得

これにより、ダイアログの初期値として現在の年月日が表示されます。

2.// DatePickerDialogを作成

DatePickerDialog:日付を選択するためのダイアログです。

引数の説明
thisContext(アクティビティ情報)を指定
selectedYear、selectedMonth、selectedDay:ユーザーが選んだ日付がここに格納されます。(selectedMonth0から始まる ため、表示するときに +1 する必要があります。)
year 、month、day:初期表示する日付として、現在の日付をセット

3.// ダイアログを表示

show():作成したDatePickerDialog を画面上に表示します。

それでは、ビルドしてアプリ画面を表示してみましょう!

【Android】Kotlinでアプリ画面にダイアログを出す方法② | DatePickerDialog, TimePickerDialog(日付、時刻選択)の実装について徹底解説

TimePickerDialogとは?(時刻選択ダイアログ)

TimePickerDialogは、時間を選択するためのダイアログです。
ユーザーは時と分を選ぶことができます。

TimePickerDialogの基本的な使い方

それでは、時間選択のできるダイアログを実装していきましょう!

①まずは、ボタンとテキストビューを含むレイアウトの実装を行います。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <!-- 時刻選択ボタン -->
    <Button
        android:id="@+id/btnShowTimePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="時間を選択"
        android:layout_gravity="center_horizontal"
        android:padding="12dp" />

    <!-- 選択した時間を表示するTextView -->
    <TextView
        android:id="@+id/txtSelectedTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="選択した時間: 00:00"
        android:textSize="18sp"
        android:layout_gravity="center_horizontal"
        android:paddingTop="16dp" />

</LinearLayout>

②そして、上記作成したレイアウトを用いて ダイアログ部分を実装していきます。

import android.app.TimePickerDialog
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import java.util.Calendar

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnShowTimePicker = findViewById<Button>(R.id.btnShowTimePicker)
        val txtSelectedTime = findViewById<TextView>(R.id.txtSelectedTime)

        btnShowTimePicker.setOnClickListener {
            // カレンダーのインスタンスを作成し、初期値を現在の時間に設定
            val calendar = Calendar.getInstance()
            val hour = calendar.get(Calendar.HOUR_OF_DAY)
            val minute = calendar.get(Calendar.MINUTE)

            // TimePickerDialogを作成
            val timePickerDialog = TimePickerDialog(
                this,
                { _, selectedHour, selectedMinute ->
                    // 選択された時間をTextViewに表示
                    val time = String.format("%02d:%02d", selectedHour, selectedMinute)
                    txtSelectedTime.text = "選択した時間: $time"
                },
                hour, minute, true // 24時間表示に設定
            )

            // ダイアログを表示
            timePickerDialog.show()
        }
    }
}

1.// カレンダーのインスタンスを作成し、初期値を現在の時間に設定

Calendar クラスを使用して、現在の時間(時、分)を取得します。

HOUR_OF_DAY:現在の「時間」(24時間形式)を取得
MINUTE:現在の「分」を取得

これにより、ダイアログの初期値として現在の時間が表示されます。

2. // TimePickerDialogを作成

TimePickerDialog:時刻を選択するためのダイアログです。

引数の説明
thisContext(アクティビティ情報)を指定
selectedHour 、selectedMinute:ユーザーが選択した時刻(時間と分)
hour 、minute:ダイアログに表示する初期時刻(現在の時刻)
true:24時間表示に設定(false にするとAM/PM表示になります)

3.// ダイアログを表示

show():作成した TimePickerDialog を画面上に表示します。

それでは、ビルドしてアプリ画面を表示してみましょう!

【Android】Kotlinでアプリ画面にダイアログを出す方法② | DatePickerDialog, TimePickerDialog(日付、時刻選択)の実装について徹底解説

また、独自のUIを作成したい場合は、カスタムダイアログ を使用して、以下のように TimePicker ウィジェットを直接利用します。

private fun showCustomTimePicker() {
        val dialogView = layoutInflater.inflate(R.layout.custom_time_picker, null)
        val timePicker = dialogView.findViewById<TimePicker>(R.id.timePicker)
        timePicker.setIs24HourView(true) // 24時間表示

        AlertDialog.Builder(this)
            .setTitle("時刻を選択")
            .setView(dialogView)
            .setPositiveButton("OK") { _, _ ->
                val hour = timePicker.hour
                val minute = timePicker.minute
                val selectedTime = String.format("%02d:%02d", hour, minute)
                println("選択した時間: $selectedTime")
            }
            .setNegativeButton("キャンセル", null)
            .show()
    }

日付と時刻を同時に選択する実装例

以下では、DatePickerDialogとTimePickerDialogを連続して表示し、
日付と時刻を両方取得します。

val calendar = Calendar.getInstance()

// DatePickerDialogで日付を選択
val datePickerDialog = DatePickerDialog(
    this,
    { _, year, month, day ->
        val selectedDate = "$year/${month + 1}/$day"

        // TimePickerDialogで時刻を選択
        TimePickerDialog(
            this,
            { _, hour, minute ->
                val selectedTime = String.format("%02d:%02d", hour, minute)
                println("選択した日付: $selectedDate, 選択した時刻: $selectedTime")
            },
            calendar.get(Calendar.HOUR_OF_DAY),
            calendar.get(Calendar.MINUTE),
            true
        ).show()
    },
    calendar.get(Calendar.YEAR),
    calendar.get(Calendar.MONTH),
    calendar.get(Calendar.DAY_OF_MONTH)
)

datePickerDialog.show()

まとめ

おつかれさまでした!いかがでしたでしょうか!

DatePickerDialog:カレンダー形式で日付を選択するダイアログ
TimePickerDialog:時刻を選択するダイアログ

これらを組み合わせることで、日付と時間を簡単に取得できる機能を実装できます。
予約アプリやリマインダー機能など、さまざまなシーンで活用してみてください!

すだ

技術者としてのキャリアパスを次のレベルへと進めたい皆様、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
を通じて、
自分の市場価値をさらに向上させてみませんか?

それではまた次の記事でお会いしましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

弊社テックブログをご愛読いただきありがとうございます。
当テックブログを運用している株式会社メモリアインクは、
【正社員】還元率83%
【フリーランス】マージン一律5万円で案件のご紹介
と、エンジニアの皆様に分かりやすい形で稼げる仕組みを構築し提供させていただいております。詳しくは弊社お問い合わせページ、プロフィールのQRコードを読み取り、LINEメッセージでお問い合わせいただけますと幸いです。

コメント

コメントする

目次