在Android中长按视图时显示弹出菜单
Android 弹出菜单在垂直列表中显示项目列表,该列表显示调用菜单的视图,并且对于提供与特定内容相关的操作溢出很有用。在本教程中,我们将学习如何在长按视图时显示弹出菜单。我们将通过在 android studio 中制作一个项目来学习它。在这里,我们将使用Kotlin作为开发语言。借助菜单,用户可以在整个应用程序中体验流畅一致的体验。因此,为了增强应用程序的 UI,我们在长按视图时使用弹出菜单。它可以是 ImageView、EditText、TextView 等任何视图。对于这个项目,我们将使用 ImageView。当我们长按图像时,弹出菜单会显示一个弹出菜单。
分步实施
第 1 步:创建一个新项目。
要在 Android Studio 中创建新项目,请参阅在 kotlin 的 android studio 中创建新项目。
第 2 步:在可绘制对象中添加矢量资源以将其用作图像视图
要添加矢量资产,请访问:
app > res > drawable > new( right-click) > vector asset
第 3 步:使用 activity_main.xml 文件。
导航到app > res > layout > activity_main.xml并将以下代码添加到该文件。下面是 activity_main.xml 文件的代码。
XML
XML
Kotlin
package com.ayush.popupmenu
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import android.widget.PopupMenu
import android.widget.Toast
import java.lang.Exception
class MainActivity : AppCompatActivity() {
lateinit var img: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
img = findViewById(R.id.img)
popupMenu()
}
private fun popupMenu() {
// creating a object of Popupmenu
val popupMenu = PopupMenu(this, img)
// we need to inflate the object
// with popup_menu.xml file
popupMenu.inflate(R.menu.popup_menu)
// adding click listener to image
popupMenu.setOnMenuItemClickListener {
when (it.itemId) {
R.id.share -> {
Toast.makeText(this, "Shared", Toast.LENGTH_SHORT).show()
true
}
R.id.save -> {
Toast.makeText(this, "saved", Toast.LENGTH_SHORT).show()
true
}
R.id.download -> {
Toast.makeText(this, "downloaded", Toast.LENGTH_SHORT).show()
true
}
else -> {
true
}
}
}
// event on long press on image
img.setOnLongClickListener {
try {
val popup = PopupMenu::class.java.getDeclaredField("mPopup")
popup.isAccessible = true
val menu = popup.get(popupMenu)
menu.javaClass.getDeclaredMethod("setForceShowIcon", Boolean::class.java)
.invoke(menu,true)
}
catch (e: Exception)
{
Log.d("error", e.toString())
}
finally {
popupMenu.show()
}
true
}
}
}
第 4 步:使用 popup_menu.xml 文件。
创建一个菜单目录,然后在弹出菜单的菜单中添加一个新的资源文件。要在 Android Studio 中创建菜单,请参阅本文。这里我们需要添加我们需要在菜单中显示的项目。我们需要指定id和title。我们还可以在标题中添加图像。这是popup_menu.xml的代码:
XML
第 5 步:使用 MainActivity.kt 文件
转到MainActivity.kt文件并参考以下代码。下面是MainActivity.kt文件的代码。在代码中添加注释以理解代码。
科特林
package com.ayush.popupmenu
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import android.widget.PopupMenu
import android.widget.Toast
import java.lang.Exception
class MainActivity : AppCompatActivity() {
lateinit var img: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
img = findViewById(R.id.img)
popupMenu()
}
private fun popupMenu() {
// creating a object of Popupmenu
val popupMenu = PopupMenu(this, img)
// we need to inflate the object
// with popup_menu.xml file
popupMenu.inflate(R.menu.popup_menu)
// adding click listener to image
popupMenu.setOnMenuItemClickListener {
when (it.itemId) {
R.id.share -> {
Toast.makeText(this, "Shared", Toast.LENGTH_SHORT).show()
true
}
R.id.save -> {
Toast.makeText(this, "saved", Toast.LENGTH_SHORT).show()
true
}
R.id.download -> {
Toast.makeText(this, "downloaded", Toast.LENGTH_SHORT).show()
true
}
else -> {
true
}
}
}
// event on long press on image
img.setOnLongClickListener {
try {
val popup = PopupMenu::class.java.getDeclaredField("mPopup")
popup.isAccessible = true
val menu = popup.get(popupMenu)
menu.javaClass.getDeclaredMethod("setForceShowIcon", Boolean::class.java)
.invoke(menu,true)
}
catch (e: Exception)
{
Log.d("error", e.toString())
}
finally {
popupMenu.show()
}
true
}
}
}
所以,我们的应用程序已经准备好了。我们可以看到输出。
输出: