如何在 Android 中检测长按事件?

长按是指按下物理按钮或点击触摸屏上的虚拟按钮并按住一两秒钟。用于触摸屏、智能手机、平板电脑和智能手表的长按或长按可提高用户界面的灵活性。典型的“短按”或“短按”执行一个操作,而短按/轻按并按住同一个按钮会激活另一个操作。长按可让您获取一些信息、从网络下载照片、编辑图片等。

我们可以在哪里使用此功能?

如前所述,长按可用于很多应用,下面列出了一些应用:

  1. 获取信息
  2. 下载照片
  3. 编辑图片
  4. 文本视图上的复制、剪切、粘贴操作

通过这篇文章,我们希望扩展我们关于长按按钮以及Android中的TextView等视图的知识。我们已经实现了一种方法,可以检测长按一段时间,如果满足条件,就会生成一个Toast 。请注意,我们将使用 Kotlin语言来实现这个项目。 

长按按钮

要在 Android 中检测长按按钮,请执行以下步骤:

第 1 步:创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。请注意,选择Kotlin作为编程语言。

第 2 步:使用 activity_main.xml 文件

转到代表应用程序 UI 的activity_main.xml文件,并创建一个长按会生成 Toast 的 Button。下面是 activity_main.xml文件的代码。 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	tools:context=".MainActivity">

	<!--This button has to be long-clicked-->
	<Button
		android:id="@+id/btn"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_centerInParent="true"
		android:text="hold" />

</RelativeLayout>

第 4 步:使用 MainActivity.kt 文件

转到MainActivity.kt文件,并参考以下代码。下面是 MainActivity.kt文件的代码。代码中添加了注释以更详细地理解代码。

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

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

		// Declare a button
		val mBtn = findViewById<Button>(R.id.btn)

		// implement a setOnLongClickListener to the
		// button that creates a Toast and
		// returns true when actually long-pressed
		mBtn.setOnLongClickListener {
			Toast.makeText(applicationContext, "Button Long Pressed", Toast.LENGTH_SHORT).show()
			true
		}
	}
}

输出:在模拟器上运行

要在 Android 中检测屏幕上的长按,请执行以下步骤:

第 1 步:创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。请注意,选择Kotlin作为编程语言。与activity_main.xml文件无关。所以保持文件原样。(假设每个新建项目默认在布局中创建一个textView)

第 2 步:使用 MainActivity.kt 文件

转到MainActivity.kt文件,并参考以下代码。下面是 MainActivity.kt文件的代码。代码中添加了注释以更详细地理解代码。

import android.os.Bundle
import android.view.GestureDetector
import android.view.GestureDetector.SimpleOnGestureListener
import android.view.MotionEvent
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
		super.onCreate(savedInstanceState)
		setContentView(R.layout.activity_main)
		// Do Nothing
	}
	
	// GestureDetecctor to detect long press
	private val gestureDetector = GestureDetector(object : SimpleOnGestureListener() {
		override fun onLongPress(e: MotionEvent) {

			// Toast to notify the Long Press
			Toast.makeText(applicationContext, "Long Press Detected", Toast.LENGTH_SHORT).show()
		}
	})

	// onTouchEvent to confirm presence of Touch due to Long Press
	override fun onTouchEvent(event: MotionEvent?): Boolean {
		return gestureDetector.onTouchEvent(event)
	}
}

输出:在模拟器上运行