From 5c8cbeb8b068b4fa810ca353ac2424fe8a1f900b Mon Sep 17 00:00:00 2001 From: geftimov Date: Thu, 5 May 2022 15:56:40 +0100 Subject: [PATCH 1/4] Add option to show at anchor location. --- .../java/me/saket/cascade/CascadePopupMenu.kt | 18 +++---- .../me/saket/cascade/sample/SampleActivity.kt | 19 ++++++-- sample/src/main/res/layout/activity_main.xml | 48 +++++++++++++++---- sample/src/main/res/values/strings.xml | 1 + 4 files changed, 65 insertions(+), 21 deletions(-) diff --git a/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt b/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt index 9865f16..ec4457c 100644 --- a/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt +++ b/cascade/src/main/java/me/saket/cascade/CascadePopupMenu.kt @@ -5,12 +5,10 @@ package me.saket.cascade import android.annotation.SuppressLint import android.content.Context +import android.content.res.Resources import android.graphics.drawable.Drawable -import android.view.Gravity -import android.view.Menu -import android.view.MenuItem -import android.view.SubMenu -import android.view.View +import android.util.Log +import android.view.* import android.view.View.SCROLLBARS_INSIDE_OVERLAY import android.view.ViewGroup.LayoutParams import android.view.ViewGroup.LayoutParams.MATCH_PARENT @@ -27,7 +25,7 @@ import androidx.recyclerview.widget.RecyclerView.RecycledViewPool import me.saket.cascade.internal.OverScrollIfContentScrolls import me.saket.cascade.internal.dip import me.saket.cascade.internal.setCallback -import java.util.Stack +import java.util.* import kotlin.DeprecationLevel.ERROR open class CascadePopupMenu @JvmOverloads constructor( @@ -68,7 +66,7 @@ open class CascadePopupMenu @JvmOverloads constructor( } } - fun show() { + fun show(atLocation: Boolean = false) { // 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 +83,11 @@ open class CascadePopupMenu @JvmOverloads constructor( } showMenu(menuBuilder, goingForward = true) - popup.showAsDropDown(anchor, 0, 0, gravity) + if(atLocation) { + popup.showAtLocation(anchor, gravity, anchor.x.toInt(), anchor.y.toInt() + anchor.height) + } 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