diff --git a/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt b/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt index 9865f16..b0b26ea 100644 --- a/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt +++ b/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt @@ -68,7 +68,8 @@ open class CascadePopupMenu @JvmOverloads constructor( } } - fun show() { + @JvmOverloads + fun show(fromAnchor: Boolean = true) { // PopupWindow moves the popup to align with the anchor if a fixed width // is known before hand. Note to self: If fixedWidth ever needs to be // removed, copy over MenuPopup.measureIndividualMenuWidth(). @@ -85,7 +86,14 @@ open class CascadePopupMenu @JvmOverloads constructor( } showMenu(menuBuilder, goingForward = true) - popup.showAsDropDown(anchor, 0, 0, gravity) + + if (fromAnchor) { + val anchorLocation = IntArray(2) + anchor.getLocationOnScreen(anchorLocation) + popup.showAtLocation(anchor, gravity, anchorLocation[0], anchorLocation[1]) + } else { + popup.showAsDropDown(anchor, 0, 0, gravity) + } } /** diff --git a/sample/src/main/java/me/saket/cascade/sample/SampleActivity.kt b/sample/src/main/java/me/saket/cascade/sample/SampleActivity.kt index 360f6a6..3dcb0c0 100644 --- a/sample/src/main/java/me/saket/cascade/sample/SampleActivity.kt +++ b/sample/src/main/java/me/saket/cascade/sample/SampleActivity.kt @@ -12,6 +12,7 @@ import android.os.Bundle import android.util.TypedValue import android.view.SubMenu import android.view.View +import android.widget.Button import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.Toolbar @@ -38,11 +39,23 @@ class SampleActivity : AppCompatActivity() { val menuButton = toolbar.findViewById(R.id.overflow_menu) showcaseMenuButton(toolbar, menuButton) menuButton.setOnClickListener { - showCascadeMenu(anchor = menuButton) + showCascadeMenu(anchor = menuButton, showAtLocation = false) + } + val button = findViewById