Контекстное меню не отображается над выбранным пунктом меню в виде списка - PullRequest
0 голосов
/ 23 марта 2019

Я работаю над приложением блокнота, и у меня возникают проблемы с контекстными меню. В приложении есть файлы и папки, поэтому у меня есть два отдельных контекстных меню (одно для файлов, другое для папок). Я получил меню для отображения нужных элементов, переопределив прослушиватель с длинным щелчком, но он не отображается непосредственно над элементом; это выглядит как диалог:

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 голосов
/ 24 марта 2019

Хорошо, я понял это; кредит частично идет на ответ выше и на этот ответ: OnClickListener - x, y место события?

По сути, вы реализуете слушатель 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
}
0 голосов
/ 24 марта 2019

Я думаю, вы можете получить желаемый результат, используя PopupMenu.

Вот документация: https://developer.android.com/reference/android/widget/PopupMenu

Вот демо: https://play.google.com/store/apps/details?id=com.alphae.rishi.towatch Я раздувал PopupMenu всякий раз, когдапользователь нажимает на трехточечное меню.

0 голосов
/ 23 марта 2019

Вы должны указать координаты, если хотите показать меню над элементом.вместо 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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...