iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
Mobile Development

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

[Day 14] Android in Kotlin: 預設的 Alert Dialog 使用分享

  • 分享至 

  • xImage
  •  

Alert Dialog 是 android 設計裡面的對話框,相信有使用過 android 系統的朋友都不陌生

預設的 alert dialog 有五個最基本的屬性設定

Dialog 五個屬性分別對到畫面上的文字是

  • title: Test
  • Message: Default Alert Dialog
  • positive button: 是
  • negative button: 否
  • neutral button: 取消

為了進行測試,我在點選以後會跳出 snackbar 讓我知道我選了什麼,所以挪出一點點時間講一樣 snackbar。

Snackbar

Snackbar 是 material design 包的一部分,所以要先引用他們的依賴包才能做使用。
他們認為,原本 toast 的風格跟 material design 不搭,所以才改用 snackbar。

就是底下那條黑色的。

直接看code。
這是平常在用的 toast:

Toast.makeText(this, "Positive button is clicked.", Toast.LENGTH_SHORT).show()

而這是 snackbar:

Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT).show() 

看起來的確是差不多

使用上要注意的是第一個參數,toast 是 context;snackbar 是 view,不能直接塞 this 進去。
所以上面那個 layout 是我自己把該 activity 畫面最外面的 layout 宣告的

private val layout: ConstraintLayout by lazy { findViewById(R.id.layoutDialog) }

snackbar 還有個特別的地方,它可以加上按鈕。

Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT)
    .setAction("OK"){
        Toast.makeText(this, "OK is Cilcked", Toast.LENGTH_SHORT).show()
    }
    .show()


加上了一個有 ok 文字的按鈕,按了再跳出 toast。

AlertDialog

繼續來看 dialog
要使用的話,就要使用 dialog builder,記得要加上 show() 方法才會成功。

val builder= AlertDialog.Builder(this).show()

直接啟用,發現什麼東西也沒有出現,但畫面變黑了。

呼叫其方法設定屬性,有需要按鈕點擊監聽器的地方就用 object 做一個 OnClickListener。

val defaultBuilder= AlertDialog.Builder(this)
    .setTitle("Test")
    .setMessage("Default Alert Dialog")
    .setPositiveButton("是", object: DialogInterface.OnClickListener{
        override fun onClick(p0: DialogInterface?, p1: Int) {
            Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT).show()
        }
    })
    .setNeutralButton("取消", object: DialogInterface.OnClickListener{
        override fun onClick(p0: DialogInterface?, p1: Int) {
            Snackbar.make(layout, "Neutral button is clicked.", Snackbar.LENGTH_SHORT).show()
        }
    })
    .setNegativeButton("否", object: DialogInterface.OnClickListener{
        override fun onClick(p0: DialogInterface?, p1: Int) {
            Snackbar.make(layout, "Negative button is clicked.", Snackbar.LENGTH_SHORT).show()
        }
    })
    .show()

以上用 java 的想法做出來的,不過,跟 button 的 OnClickListener 一樣,OnClickListener 可以轉為 lambda 表達式

val defaultBuilder= AlertDialog.Builder(this)
    .setTitle("Test")
    .setMessage("Default Alert Dialog")
    .setPositiveButton("是") { p0, p1 ->
        Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT).show()
    }
    .setNeutralButton("取消") { p0, p1 ->
        Snackbar.make(layout, "Neutral button is clicked.", Snackbar.LENGTH_SHORT).show()
    }
    .setNegativeButton("否") { p0, p1 ->
        Snackbar.make(layout, "Negative button is clicked.", Snackbar.LENGTH_SHORT).show()
    }
    .show()

出來的結果是一樣的


上一篇
[Day 13]Android in Kotlin: ShapeDrawable 的 Rectangle 製作
下一篇
[Day 15] Android in Kotlin: 其他的 Dialog 屬性分享
系列文
大一之 Android Kotlin 自習心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言