點擊事件和長按事件
- 監聽器:專門監聽控件的動作行為。只有控件發生了指定的動作,監聽器才會觸發開關區執行對應的代碼邏輯。
- 按鈕控件有兩種常用的監聽器:
- 點擊監聽器:通過setOnClickListener方法設置。按鈕被按住少于500ms時會觸發點擊事件。
- 長按監聽器:通過setOnLongClickListener方法設置。按鈕被按住超過500ms時,會觸發長按事件。
點擊事件
只有一個按鈕
- 示例代碼
package com.example.chapter03import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import com.example.chapter03.util.DateUtilclass ButtonClickActivity : AppCompatActivity() {@SuppressLint("MissingInflatedId")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_button_click)val tv_result: TextView = findViewById(R.id.tv_result)val btn_click_single: Button = findViewById(R.id.btn_click_single)btn_click_single.setOnClickListener(MyOnClickListener(tv_result)) // 實例化類的一個對象出來}// 創建一個類 MyOnClickListener ,來實現 View.OnClickListener 接口class MyOnClickListener(private val tv_result: TextView) : View.OnClickListener {override fun onClick(p0: View?) {val dsec = String.format("%s 您點擊了按鈕: %s", DateUtil.getNowTime(), (p0 as Button).text)tv_result.text = dsec // kotlin不用set(),也不用get()}}
}
<?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"><Buttonandroid:id="@+id/btn_click_single"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="指定單獨的點擊監聽器"android:textColor="#000000"android:textSize="15sp"/><TextViewandroid:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:gravity="center"android:textColor="#000000"android:textSize="15sp"android:text="查看按鈕點擊的結果"/>
</LinearLayout>
- 運行結果
(穿插kotlin小筆記)
(構造器傳參 簡寫)
class MyOnClickListener: View.OnClickListener {private val tv_result: TextViewconstructor(tv_result: TextView) {this.tv_result = tv_result}
}// 改進
class MyOnClickListener(private val tv_result: TextView) : View.OnClickListener {}
有兩個按鈕
- 示例代碼
package com.example.chapter03import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import com.example.chapter03.util.DateUtilclass ButtonClickActivity : AppCompatActivity() {@SuppressLint("MissingInflatedId")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_button_click)val tv_result: TextView = findViewById(R.id.tv_result)val btn_click_single: Button = findViewById(R.id.btn_click_single)btn_click_single.setOnClickListener(MyOnClickListener(tv_result)) // 實例化類的一個對象出來val btn_click_public: Button = findViewById(R.id.btn_click_public)btn_click_public.setOnClickListener(MyOnClickListener(tv_result))}// 創建一個類 MyOnClickListener ,來實現 View.OnClickListener 接口class MyOnClickListener(private val tv_result: TextView) : View.OnClickListener {override fun onClick(p0: View?) {val dsec = String.format("%s 您點擊了按鈕: %s", DateUtil.getNowTime(), (p0 as Button).text)tv_result.text = dsec // kotlin不用set(),也不用get()}}
}
<?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"><Buttonandroid:id="@+id/btn_click_single"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="指定單獨的點擊監聽器"android:textColor="#000000"android:textSize="15sp"/><Buttonandroid:id="@+id/btn_click_public"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="指定公共的點擊監聽器"android:textColor="#000000"android:textSize="15sp"/><TextViewandroid:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:gravity="center"android:textColor="#000000"android:textSize="15sp"android:text="查看按鈕點擊的結果"/></LinearLayout>
- 結果