我正在使用记事本应用程序,但上下文菜单出现问题。该应用程序具有文件/文件夹,因此我有两个单独的上下文菜单(一个用于文件,一个用于文件夹)。通过覆盖长按侦听器,我可以通过菜单显示正确的项目,但是它不会直接显示在项目上方;它看起来像一个对话框:
这是长按侦听器的代码;我真的觉得问题出在这里;如果没有,我可以再发表一点:
override fun onItemLongClick(adapterView: AdapterView<*>?, p1: View?, pos: Int, p3: Long): Boolean {
val p : Int = adapterView?.getItemAtPosition(pos) as Int
currentFile = fileContents[p]
fileList.showContextMenu()
return true
}
答案 0 :(得分:0)
如果要在项目上方显示菜单,则应提供坐标。
代替fileList.showContextMenu()
,使用p1.showContextMenu(p1.pivotX,p1.pivotY)
override fun onItemLongClick(adapterView: AdapterView<*>?, p1: View?, pos: Int, p3: Long): Boolean {
val p : Int = adapterView?.getItemAtPosition(pos) as Int
currentFile = fileContents[p]
p1.showContextMenu(p1.pivotX,p1.pivotY)
return true
}
答案 1 :(得分:0)
好,所以我知道了;功劳部分归功于上述答案和该答案:OnClickListener - x,y location of event?
基本上,您可以实现onTouch侦听器以获取最后的x和y坐标,然后将它们传递给showContextMenu方法。这是我用来实现此目的的代码:
override fun onTouch(p0: View?, event: MotionEvent?): Boolean {
if (event!!.actionMasked == MotionEvent.ACTION_DOWN) {
lastX = event.x
lastY = event.y
}
return false
}
答案 2 :(得分:0)
我认为您可以使用PopupMenu获得所需的结果。
以下是文档:https://developer.android.com/reference/android/widget/PopupMenu
以下是演示:https://play.google.com/store/apps/details?id=com.alphae.rishi.towatch 每当用户单击三点菜单时,我都会放大PopupMenu。