上下文菜单未显示在列表视图中的所选菜单项上方

时间:2019-03-23 00:28:45

标签: android kotlin

我正在使用记事本应用程序,但上下文菜单出现问题。该应用程序具有文件/文件夹,因此我有两个单独的上下文菜单(一个用于文件,一个用于文件夹)。通过覆盖长按侦听器,我可以通过菜单显示正确的项目,但是它不会直接显示在项目上方;它看起来像一个对话框:

enter image description here

这是长按侦听器的代码;我真的觉得问题出在这里;如果没有,我可以再发表一点:

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
}

3 个答案:

答案 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。