##はじめに
本日はTimePickerDialogについて話していきたいと思います
##環境
⚫︎OS : macOS Catalina 10.15.7
⚫︎Androidsutdio : 4.2.1
⚫︎Kotlin : 1.5.21
⚫︎Gradle : 7.0.2
##TimePickerDialogとは
TimePickerDialogは、時刻の入力に優れたGUIコンポーネントのこと。
##実装
<?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"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvAddTime"
android:layout_width="227dp"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:text="@string/tv_add_time"
android:textSize="17dp" />
<Button
android:id="@+id/btAddTime"
android:layout_width="179dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:onClick="showTimePickerDialog"
android:text="@string/add_date"
android:textSize="20dp"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:layout_marginLeft="8dp"
android:text="@string/tv_add_memo"/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/MemoField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<EditText
android:id="@+id/etAddMemo"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/MemoInsertButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onInsertButtonClick"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="25dp"
android:text="@string/bt_insert_memo" />
</LinearLayout>
この様な画面になります。
本来この画面では空文字チェックや時刻とメモをDBに登録などを行なっている画面ですが、今回はダイアログに焦点を当てていきます。
やることとしてはセットと書かれているボタンをタップすると、ダイアログが表示されるという感じにしていきます
// タイマー設定ボタンをクリックした時のメソッド
fun showTimePickerDialog(v: View) {
//TImePickクラス呼び出し
val newFragment = TimePick()
newFragment.show(supportFragmentManager, "timePicker")
}
ボタンが押された際の処理を記述しています。
TimePick.kt
class TimePick : DialogFragment(), TimePickerDialog.OnTimeSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
//インスタンス
val c = Calendar.getInstance()
//最初に、システムの現在の時間と分を取得
val hour = c.get(Calendar.HOUR_OF_DAY)
val minute = c.get(Calendar.MINUTE)
return TimePickerDialog(
activity,
activity as MemoAddActivity?,//返したいアクティビティをセット
hour,
minute,
true)
}
override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
//
}
}
アクティビティに戻ります
class MemoAddActivity : FragmentActivity(), TimePickerDialog.OnTimeSetListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_memo_add)
}
override fun onTimeSet(view: TimePicker , hourOfDay: Int , minute: Int) {
val str = String.format(Locale.US, "%d:%d", hourOfDay, minute)
val timeView = findViewById<TextView>(R.id.tvAddTime)
timeView.text = str
}
onTimeSet() を持ってきて時刻を取得し、TextViewに格納しています
ここまで記述すると
TextViewに取得した時刻が表示されています
##おしまい
実際のこの画面では空文字チェックやDB登録なども行なっているので後日記載していきたいと思います!