点击事件和长按事件
- 监听器:专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关区执行对应的代码逻辑。
- 按钮控件有两种常用的监听器:
- 点击监听器:通过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>
- 结果