如何在 Android 中的特定位置打开上下文菜单而不是作为菜单对话框

How to open context Menu at specific position in Android and not as menu dialog

如何在指定位置打开上下文菜单,如下图所示。该应用程序是 doubleTwistPlayer - 请参阅 Play Store

点击它会自动打开上下文菜单,而不是上下文菜单对话框


已经尝试过

menu_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/itemApplyNew"
        android:title="@string/applyNew"/>

    <item android:id="@+id/itemAppliedLeaves"
        android:title="@string/appliedLeaves"/>    


</menu>

list_item.xml(因为我想在列表中实现它)

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

<!-- <RelativeLayout  
    android:id="@+id/relUpperBody"
    android:background="@color/listViewTopContentBackground"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"> -->
<TextView
    android:id="@+id/txvLeaveName"
    style="@style/ListViewItemHeaderText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"        
    android:text="sdfsdfsd" />

<TextView
    android:id="@+id/txvBalanceLeave"
    style="@style/ListViewItemHeaderText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/imgLeaveAction"
    android:text="dsfgd" />
<!-- </RelativeLayout> -->

<TextView
    android:id="@+id/txvAllottedLbl"
    style="@style/ListViewItemTextSize"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/txvLeaveName"
    android:layout_marginTop="15dp"
    android:text="@string/allotted" />

<TextView
    android:id="@+id/txvAllottedLeave"
    style="@style/ListViewItemTextSize"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/txvBalanceLeave"
    android:layout_alignBaseline="@+id/txvAllottedLbl"
    android:text="sgsdg" />

<ImageView
    android:id="@+id/imgLeaveAction"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:src="@drawable/ellipsis_menu_overflow" />


问题

  1. 如何实现?
  2. 是上下文菜单还是其他?

我认为这是一个 ListPopupWindow,您需要做的就是创建一个从您的列表适配器到您的片段的回调/activity 并将点击的视图作为参数传递到回调中并使用 ListPopupWindow 集您传递的视图的锚点,您可以创建自己的自定义适配器并将其设置为 ListPopupWindow 并传递要在弹出窗口中显示的项目列表,希望这对您有所帮助。

您需要使用 PopupMenu

Popup menu
A popup menu displays a list of items in a vertical list that's anchored to the view that invoked the menu. It's good for providing an overflow of actions that relate to specific content or to provide options for a second part of a command. Actions in a popup menu should not directly affect the corresponding content—that's what contextual actions are for. Rather, the popup menu is for extended actions that relate to regions of content in your activity.

关于实施的更多信息here

使用弹出菜单。 如果 space 可用,则 Android 弹出菜单会在锚文本下方显示菜单,否则会在锚文本上方显示菜单。如果您在弹出菜单外单击,它就会消失。

检查一下here