TimePickerDialog

##はじめに

本日はTimePickerDialogについて話していきたいと思います

##環境

⚫︎OS : macOS Catalina 10.15.7
⚫︎Androidsutdio : 4.2.1
⚫︎Kotlin : 1.5.21
⚫︎Gradle : 7.0.2


##TimePickerDialogとは

TimePickerDialogは、時刻の入力に優れたGUIコンポーネントのこと。


[めちゃくちゃ参考にさせて頂きました](https://qiita.com/fumiyakawauso/items/dbb0517144f2a4400e6a)

##実装
```Kotlin

<?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>
```

![スクリーンショット 2021-08-27 23.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/c6607503-2a17-f861-0859-c2d49884f91d.png)

この様な画面になります。
本来この画面では空文字チェックや時刻とメモをDBに登録などを行なっている画面ですが、今回はダイアログに焦点を当てていきます。
やることとしてはセットと書かれているボタンをタップすると、ダイアログが表示されるという感じにしていきます
![スクリーンショット 2021-08-27 23.48.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/41600a25-a091-ee64-a684-7d25055fc227.png)

```Kotlin

    // タイマー設定ボタンをクリックした時のメソッド
    fun showTimePickerDialog(v: View) {
        //TImePickクラス呼び出し
        val newFragment = TimePick()
        newFragment.show(supportFragmentManager, "timePicker")

    }
```

ボタンが押された際の処理を記述しています。


```Kotlin: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) {
        //
    }
}
```

アクティビティに戻ります

```Kotlin

   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に格納しています


ここまで記述すると
![スクリーンショット 2021-08-28 0.11.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/776d433b-9c4b-0c82-9b36-ae256a30906e.png)
TextViewに取得した時刻が表示されています
![スクリーンショット 2021-08-28 0.12.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/22a60d2d-4d8c-8dc0-1a55-ee45bc489cf0.png)



##おしまい

実際のこの画面では空文字チェックやDB登録なども行なっているので後日記載していきたいと思います！