iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0
Mobile Development

大一之 Android Kotlin 自習心路歷程系列 第 15

[Day 15] Android in Kotlin: 其他的 Dialog 屬性分享


除了前一篇可以回答是或否的 alert dialog 以外,還有其他的 dialog 的表示方式

setItems

首先是單選,畫面會以列表的方式顯示內容。

AlertDialog.Builder(this)
    .setTitle("Items")
    .setItems(list) { _, position ->
        Snackbar.make(layout, "$position", Snackbar.LENGTH_SHORT).show()
    }.show()

lambda 中的 position 代表選取哪一個,position 從 0 開始。所以如果我點選 C 選項的話,snack bar 會顯示 2。

點下其中一個選項以後,就會自己關閉

setSingleChoiceItem

這個也是單選,有點像是 checkbox,但是是再按下按鈕才可以退出。

AlertDialog.Builder(this)
    .setTitle("SingleChoiceItems")
    .setSingleChoiceItems(list, 0){ _, position ->
        Snackbar.make(layout, "$position", Snackbar.LENGTH_SHORT).show()
    }.setPositiveButton("Ok"){ _, position ->
        Snackbar.make(layout, "$position is selected", Snackbar.LENGTH_SHORT).show()
    }
    .show()

除了設定 positive button,還可以監聽點選時的選項,得知使用者點下了哪一個選項。

setMultipleChoiceItem

相對於上面的單選,這個就是複選了,看起來像是 radio button。

不同的是,它會可以加一個 array 放每個選項的狀態

val isCheckedList= booleanArrayOf(true, true, false, false, false)

這樣剛出現 dialog 時,就會像上面的一樣,A 跟 B 都先選取起來了

AlertDialog.Builder(this)
    .setTitle("MultiChoiceItems")
    .setMultiChoiceItems(list, isCheckedList) { _, position, isChecked ->
        Snackbar.make(layout, "$position: $isChecked", Snackbar.LENGTH_SHORT).show()
        isCheckedList[position]= isChecked
    }.setPositiveButton("Ok"){ _, _ ->
        Snackbar.make(layout, "isChecked: ${isCheckedList.filter { true }}", Snackbar.LENGTH_SHORT).show()
    }

position 跟 isChecked 代表使用者點下的那個選項位置跟狀態。

往後要知道哪一個選項有被選取,就可以從原本的 array 得知。

DatePickerDialog

這是一個可以選擇日期的 dialog。

val now= LocalDate.now()

呼叫 LocalDate 的 now 方法,得知現在的日期。
但要使用此方法,要 API level 26 以上,更改一下 build.gradle 的 minSdkVersion 或是改用其他方法取得。

DatePickerDialog(this,  { _, year, month, day ->
    Snackbar.make(layout, "Selected Date: $year/$month/$day", Snackbar.LENGTH_SHORT).show()
}, now.year, now.monthValue, now.dayOfMonth).show()

裡面的 year, month, day 即為選取的日期。

最後面的三個參數,是開啟 dialog 的預設選擇日期,所以前面才需要今天的日期。

TimePickerDialog

val now= LocalTime.now()

跟日期一樣 LocalDate 的 now 方法,取得現在的時間。一樣需要 API level 26 或以上

TimePickerDialog(this, { _, hour, minute ->
    Snackbar.make(layout, "Selected Time: $hour:$minute", Snackbar.LENGTH_SHORT).show()
}, now.hour, now.minute, true).show()

一樣的,裡面的 hour, minute 即為選取的時間;後面的兩個參數是預設選取時間。

而最後的 true 是代表是否要以 24 小時制呈現。

setView

如果上述的 dialog 類型都不滿意的話,可以自己做一個 view,再用 setView 帶入。


上一篇
[Day 14] Android in Kotlin: 預設的 Alert Dialog 使用分享
下一篇
[Day 16] Android in Kotlin: 自定義 Dialog 分享
系列文
大一之 Android Kotlin 自習心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言