みなさまこんにちは〜!
メモリアインクのすだです。
本日は、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()
}
}
}
それでは、ビルドしてアプリ画面を表示してみましょう!
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()
}
}
}
それでは、ビルドしてアプリ画面を表示してみましょう!
また、独自の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エンジニアを目指すなら【ユニゾンキャリア】
自分の市場価値をさらに向上させてみませんか?
それではまた次の記事でお会いしましょう!
コメント