如何使用TimePickerDialog(kotlin)

如何使用TimePickerDialog(kotlin)

情境

如何使用DatePickerDialog中,我們是犯了怎麼使用日期選擇器,那你會想問是否有時間選擇器,答案是有的,Android 提供了現成的元件讓使用者可以直接選取時間的工具,這樣使用者就可以正確的選取時間了。

完整程式碼

如果你想要完整程式碼,可以到 GitHub 上觀看或下載。

程式碼說明

首先你先建立好一個 Button 跟一個 TextView。

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

 <Button  android:id="@+id/date_button"  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  android:text="@string/date_select" />  

 <TextView  android:id="@+id/date_text"  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content" />  
</LinearLayout>

可以看到結果如下圖。

接著我們在主程式內設定好所有元件的初始化,將 xml 內的 Button 跟 TextView 呼叫出來,並且設定好 Button 按下去的事件。

以下這份程式碼是java部分的程式碼, 搭配上面的xml部分,
可以直接複製貼上, 就可以執行。

class MainActivity : AppCompatActivity() {  
  
 override fun onCreate(savedInstanceState: Bundle?) {  
  super.onCreate(savedInstanceState)  
  setContentView(R.layout.activity_main)  
  date_button.setOnClickListener {  
   val calendar = Calendar.getInstance()  
   val hour = calendar.get(Calendar.HOUR_OF_DAY)  
   val minute = calendar.get(Calendar.MINUTE)  
   TimePickerDialog(this, {  
    _, hour, minute->  date_text.text = "現在時間是 $hour:$minute"  
   }, hour, minute, true).show()  
  }  
 }  
}

讓我們來看一下 TimePickerDialog 的接口。

class TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView)

TimePickerDialog 是一個 Android 寫好的類別,它可以提供使用者簡單操作的設定時間介面,
呼叫它的方式就是呼叫 TimePickerDialog 並且傳入對應的參數。

  • 第一個參數是 Context , 也就是說必須把 MainActivity 本身或者 Context 物件傳入。
  • 第二個參數是 OnTimeSetListener , 這邊是實作 OnTimeSetListener 這個介面的事件, 它提供使用者操控完時間介面後, 所傳回的時間。
  • 第三個是現在是幾點, 我們可以透過 Canlendar 的幫忙得到這個資訊。
  • 第四個是現在是幾分, 我們可以透過 Canlendar 的幫忙得到這個資訊。
  • 最後一個參數是boolean, true代表呈現24小時, false代表只顯示12小時。

你會注意到時間旁邊有出現上午跟下午,這是因為最後一個參數你設定為 false。

如果你改成 true 就會看到以下畫面是 24 小時狀態的。

當你按下確定以後,就會把結果回傳至事件傳入值,再利用這些傳入字將其填入 Toast 訊息內,如下圖。

這樣就是一個簡單的 TimePickerDialog 的應用了。