DAY22 这边先帮你上一个按钮喔~(四)

「欸!?阿按了这个按钮怎麽没反应阿?」

这是我妈最常问我的问题,大部分情况都是她遥控器忘记装电池。

如果按钮按下去之後有个反应或是回馈的话,是不是就能让使用者能更沉浸在互动中呢?

「帮我看一下啦。」

妈!没问题!


现在的你了解了 Activity 的大致用途,接下来就是让 App 上的按钮点了真的有反应的时候了。这时候介绍一个东西:
https://ithelp.ithome.com.tw/upload/images/20211007/20140638AhbD6xIMEr.jpg

Toast

其实我第一次看到这个名词的时候,也是各种问号,吐司???查了一下资料发现,其实它比想像中的更加熟悉,就是这个:

https://ithelp.ithome.com.tw/upload/images/20211007/20140638DmIsvHLzyP.png

通常会出现在底部,大概过几秒就消失的小文字讯息方块就是 Toast ,当然它也可以出现在萤幕的任何地方,也可以客制化 Toast 的样式,但我们这边就没有说明这些了。这边只是先放个提示说你点了这个 Button 这样。

昨天所说到 Andriod 在第一次打开 App 的时候会先调用 onCreate( ) ,再去画出 Layout ,你可以把要执行动作的程序码加到 onCreate() 之後。利用 findViewById( ) 可以找到 Button ,R.id.Button 是 Button 的 resource ID,每个resource ID 都是唯一值。再把 Button 这个 object 保存到一个变数 rollButton 中。

val rollButton: Button = findViewById(R.id.button)

把这行加到 onCreate( ) 函式之中就会是这个样子:

override fun onCreate(savedInstanceState: Bundle?){
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
  
    val rollbutton: Button = findViewById(R.id.button)

再往上看到 import 会发现多了一行内容:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

第三行的 import 是自动加上去的,如果没有的话直接在警告那边按 alt+Enter 就可以添加上去了。

接下来要设定监听,让 button 的动作与程序结合。我们使用 setOnClickListener( ) 这个function 去监听,实际上在这个方法的後面会使用 { } ,大括号中可以放入点按之後会执行的动作的程序码。

rollButton.serOnClickListener{

}

我们选择在里面放入一个 Toast 讯息,让 user 知道他点了按钮:

val toast = Toast.makeText(this , "Dice Rolled!",Toast.LENGTH_SHORT)
toast.show()

利用 Toast.makeText( ) 来创建包含 "Dice Roller!" 讯息的 Toast ,在透过 show( ) 来显示。当然你也可以写得更简洁一点:

Toast.makeText(this,"Dice Rolled!",Toast.LENGTH_SHORT).show()

加入这些程序码的整体看起来会像是这样:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.button2)
        rollButton.setOnClickListener {
            Toast.makeText(this,"Dice Rolled!", Toast.LENGTH_SHORT).show()
        }
    }
}

运行起来就会是这个样子:

https://ithelp.ithome.com.tw/upload/images/20211007/201406384bDOljgbdG.png


点按按钮之後改变 TextView

按钮被点下去了!数字也是时候该让它出现了!

先去 Attribute 里看 TextView 的 id ,

https://ithelp.ithome.com.tw/upload/images/20211007/20140638Yomqr1Pwvj.png

已差不多的步骤去让他与 Button 连动,先宣告一个变数去接 TextView :

val resultTextView: TextView = findViewById(R.Id.textView)
resultTextView.text = "6"

这边先预设点按之後 resultTextView 的 text 会出现 6 ,之後我们再把骰子的程序补上,最後的程序应该会长这样:


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.button2)
        rollButton.setOnClickListener {
            Toast.makeText(this,"Dice Rolled!", Toast.LENGTH_SHORT).show()
            val resultTextView: TextView = findViewById(R.id.textView)
            resultTextView.text = "6"
        }
    }
}

今天让终於让 Button 与程序码有点互相关联了,但还是有一小段路要完成,我是真的没有想到我 Button 可以写那麽多篇,本想快速结束。但是真的太多了。一样先 JOHN,

下一篇见写写打家打家摆掰。


<<:  [23] 用 python 刷 Leetcode: 290 Word Pattern

>>:  人脸辨识-day22

Day25-介接 API(三)Google Calendar(III)OAuth 凭证建立与用 Google Calendar API 建立 Google Meet 会议

大家好~ 今天来实作如何用 Google Calendar API 建立 Google Meet 会...

[Day 28]粗糙集特徵选择简介-6

这里我用 pandas.DataFrame 里的 groupby 帮我做分类 然後用 apply(l...

javascript HTML DOM4

最後我们学习如何控制多个表单的开合 ...

Day27 人物骨架 - 简介篇

本篇文章的Unreal engine 4 版本为 4.25.3 今天要介绍的部分前面有稍微提到过,就...

配置 Promethues 与 Grafana

docker-compose 范例可参考 github 上的配置,主要是 prometheus、pu...