B4A Class [B4X] [XUI] AS Popup Menu (on any view) [BETA]

This is a simple cross platform Popup Menu.

I spend a lot of time in creating views, like this and to create a high quality view cost a lot of time. If you want to support me and further views, then you can do it here by Paypal. :)

Left: B4J Right: B4A

1598981805790.png
Screenshot_20200901-193834.jpg
ezgif.com-resize.gif
Screenshot_20201124-140900.jpg
IMG_2331.jpg

ASPopupMenu
Author: Alexander Stolte
Version: 1.08

  • ASPM_ItemLabelProperties
    • Fields:
      • BackgroundColor As Int
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • ItemBackgroundColor As Int
      • LeftRightPadding As Float
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • xFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASPM_TitleLabelProperties
    • Fields:
      • BackgroundColor As Int
      • Height As Float
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • ItemBackgroundColor As Int
      • LeftRightPadding As Float
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • xFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASPopupMenu
    • Events:
      • ItemClicked (Index As Int, Tag As Object)
    • Fields:
      • AutoHideMs As Int
      • CloseDurationMs As Int
      • OpenDurationMs As Int
    • Functions:
      • AddMenuItem (text As String, tag As Object) As String
      • AddTitle (Text As String, height As Float) As String
      • Class_Globals As String
      • Clear As String
        clears the list
      • CloseMenu As String
      • CreateASPM_ItemLabelProperties (TextColor As Int, xFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String, BackgroundColor As Int, ItemBackgroundColor As Int, LeftRightPadding As Float) As ASPM_ItemLabelProperties
      • CreateASPM_TitleLabelProperties (TextColor As Int, xFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String, BackgroundColor As Int, ItemBackgroundColor As Int, LeftRightPadding As Float, Height As Float) As ASPM_TitleLabelProperties
      • getBase As B4XView
      • getisOpen As Boolean
        checks if the menu is open
      • getItemLabelProperties As ASPM_ItemLabelProperties
        change the label properties, call it before you add items
        <code>ASScrollingTags1.LabelProperties.xFont = xui.CreateDefaultBoldFont(15)</code>
      • GetMenuItemAt_Background (index As Int) As B4XView
        gets a menu item background (parent of label)
      • GetMenuItemAt_Label (index As Int) As B4XView
        gets a menu item label - the label with the text
      • getOrientationHorizontal_LEFT As String
      • getOrientationHorizontal_MIDDLE As String
      • getOrientationHorizontal_RIGHT As String
      • getOrientationVertical_BOTTOM As String
      • getOrientationVertical_TOP As String
        Vertical = Top,Bottom
        Horizontal = Left,Middle,Right
      • getSize As Int
        gets the list size
      • getTitleLabelProperties As ASPM_TitleLabelProperties
        change the label properties, call it before you add the title
        <code>ASScrollingTags1.TitleLabelProperties.xFont = xui.CreateDefaultBoldFont(20)</code>
      • Initialize (Parent As B4XView, CallBack As Object, EventName As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • OpenMenu (view As B4XView, width As Float)
        Opens the menu on a view
      • OpenMenu2 (parent As B4XView, width As Float)
        Open the menu on center of parent/view
      • RemoveTitle As String
        Removes the title if exists
      • Resize (parent_width As Float, parent_height As Float) As String
      • setActivityHasActionBar (value As Boolean) As String
      • setCloseAfterItemClick (enabled As Boolean) As String
        closes the menu automatically after clicking on an item
        standard is True
      • setDividerColor (color As Int) As String
        the color of the dividers
      • setDividerEnabled (enable As Boolean) As String
        Adds or Removes the dividers
      • setDividerHeight (height As Float) As String
        the height of the dividers
      • setIsInSpecialContainer (value As Boolean) As String
        set it true if the target is on a listview or as a child on a panel where the left and top values differ from the form
      • setItemBackgroundColor (crl As Int) As String
        sets the item background color for all items
      • setMenuCornerRadius (radius As Int) As String
      • setOrientationHorizontal (orientation As String) As String
      • setOrientationVertical (orientation As String) As String
      • ViewScreenPosition (view As B4XView) As Int()
    • Properties:
      • ActivityHasActionBar
      • Base As B4XView [read only]
      • CloseAfterItemClick
        closes the menu automatically after clicking on an item
        standard is True
      • DividerColor
        the color of the dividers
      • DividerEnabled
        Adds or Removes the dividers
      • DividerHeight
        the height of the dividers
      • IsInSpecialContainer
        set it true if the target is on a listview or as a child on a panel where the left and top values differ from the form
      • isOpen As Boolean [read only]
        checks if the menu is open
      • ItemBackgroundColor
        sets the item background color for all items
      • ItemLabelProperties As ASPM_ItemLabelProperties [read only]
        change the label properties, call it before you add items
        <code>ASScrollingTags1.LabelProperties.xFont = xui.CreateDefaultBoldFont(15)</code>
      • MenuCornerRadius
      • OrientationHorizontal
      • OrientationHorizontal_LEFT As String [read only]
      • OrientationHorizontal_MIDDLE As String [read only]
      • OrientationHorizontal_RIGHT As String [read only]
      • OrientationVertical
      • OrientationVertical_BOTTOM As String [read only]
      • OrientationVertical_TOP As String [read only]
        Vertical = Top,Bottom
        Horizontal = Left,Middle,Right
      • Size As Int [read only]
        gets the list size
      • TitleLabelProperties As ASPM_TitleLabelProperties [read only]
        change the label properties, call it before you add the title
        <code>ASScrollingTags1.TitleLabelProperties.xFont = xui.CreateDefaultBoldFont(20)</code>
Changelog
  • 1.00
    • Release
  • 1.01
    • Adds background_color global variable - the background color of the parent view during the menu is open
    • Adds setItemBackgroundColor - change the items background color
    • Better Handling in "Nested Layouts"
    • Add ActivityHasActionBar - set to true if you have a ActionBar enabled
    • Add IsInSpecialContainer - set it true if the target is on a listview or as a child on a panel where the left and top values differ from the form
    • Add setOrientationVertical
    • Add setOrientationHorizontal
    • Adds "Enums" for Orientations -TOP,BOTTOM -LEFT,MIDDLE,RIGHT
  • 1.02
    • Add OpenMenu2 - Opens the menu in center of the parent view
    • Add Clear - clear all
    • Add getBase - gets the base view to customize it
    • Add getLabelProperties - customize it if you want, before you add a new menu item
      • Screenshot_20201124-134749.jpg
      • this is now possible
        • aspm_main.LabelProperties.ItemBackgroundColor = xui.Color_ARGB(255,Rnd(1,256), Rnd(1,256), Rnd(1,256))
    • Remove background_color and itembackground_color
      • Added to getLabelProperties
    • Add GetMenuItemAt_Label
    • Add GetMenuItemAt_Background
    • Add getSize
    • Add setMenuCornerRadius - sets the corner radius for the menu (works only in B4A and B4I)
      • Screenshot_20201124-140900.jpg
  • 1.03
    • Add LeftRightPadding to ASPM_LabelProperties - label padding to have more space left and right for example HorizontalCenter = LEFT
    • OpenMenu the background is now smoother on show
    • setMenuCornerRadius is now available on B4J (thanks @Erel)
  • 1.04
    • getLabelProperties is renamed to getItemLabelProperties
    • Add AddTitle - you can now add a title to the menu
      • Add TitleLabelProperties - you can change the title properties with it
    • Add RemoveTitle - Removes the title if exists
    • Add AutoHideMs
    • Add DividerEnabled - you can now show dividers between the items
      • Add DividerHeight - the height of the dividers
      • Add DividerColor - the color of the dividers
  • 1.05
    • OpenMenu Show Animation with the background is now animated
    • BugFixes
  • 1.06
    • BugFixes
  • 1.07
    • Add get isOpen - checks if the menu is open
    • BugFix - if you called OpenMenu several times without closing the menu, then the menu was added several times
    • Add set CloseAfterItemClick - closes the menu automatically after clicking on an item
      • standard is True
    • Add set and get CloseDurationMs - the duration it takes for the menu to be completely closed
    • Add set and get OpenDurationMs - the duration it takes for the menu to be fully visible
  • 1.08
    • Intern Function IIF renamed to iif2
Have Fun :)
 

Attachments

  • AS PopupMenu Example.zip
    10.4 KB · Views: 273
  • ASPopupMenu.b4xlib
    5.4 KB · Views: 146
Last edited:

endbyte

Member
At the bottom of my application there is a panel with several buttons, I put a menu button on the left side of that panel, but when I press the button so that the menu appears, it appears but on the top edge of my application, I have tried to Anyway so that it appears right on the menu button(BMMenus2) but I can't do it, please tell me what I'm doing wrong, this is the configuration of my menu and the code where I call it from the button:

B4X:
'*************** CONFIGURACION DE MENU *****
aspm.Initialize(Activity,Me,"aspm")
aspm.ActivityHasActionBar = False
aspm.OrientationVertical = aspm.OrientationVertical_TOP
aspm.Orientationhorizontal = aspm.OrientationHorizontal_LEFT
aspm.ItemLabelProperties.BackgroundColor = XUI.Color_ARGB(100,0,0,0)'black
aspm.DividerEnabled = True
aspm.DividerHeight = 1dip
aspm.DividerColor = XUI.Color_white
aspm.TitleLabelProperties.BackgroundColor = XUI.Color_White
aspm.TitleLabelProperties.TextColor = XUI.Color_Black
aspm.TitleLabelProperties.xFont = XUI.CreateDefaultBoldFont(12)
aspm.AddTitle("opciones de entrada",45dip)
aspm.MenuCornerRadius = 5dip
aspm.ItemLabelProperties.ItemBackgroundColor = XUI.Color_ARGB(255,150, 150, 150)
aspm.ItemLabelProperties.xFont=XUI.CreateDefaultFont(12)
aspm.ItemLabelProperties.TextColor = XUI.Color_ARGB(255,0,0,0)
aspm.AddMenuItem("Guardar movimiento", 0)
aspm.AddMenuItem("Copiar movimiento", 1)
aspm.AddMenuItem("Borrar movimiento", 2)
aspm.AddMenuItem("Agregar entrada", 3)


Sub BMMenus2_Click
    aspm.OpenMenu(BMMenus2,200dip)
End Sub
 
Last edited:

endbyte

Member
I corrected it by changing this line, I did several tests putting views with top vertical orientation menu and it works well on vertical and horizontal screen, thanks, very useful library. I'm really liking b4a.

B4X:
Private Sub GetTopLeft(top As Float,left As Float,width As Float,view As B4XView)
    If top < 0 Then
        top = view.Top + view.Height
    Else If (top + xpnl_background.Height) > max_y Then
        'top = view.Top - xpnl_background.Height
        top = view.Top - xpnl_background.Height + view.Height 'CHANGE OF LINE
    Else If left < 0 Then
        left = 0
    Else If (left + width) > max_x Then
        left = max_x - width
    Else
        CallSubDelayed3(Me,"lol",left,top)
        Return
    End If
    If max_endlessloop = 10 Then
        CallSubDelayed3(Me,"lol",left,top)
        Return
    End If
    max_endlessloop = max_endlessloop +1
    GetTopLeft(top,left,width,view)
End Sub
 
Last edited:

mfstuart

Active Member
Licensed User
This is a simple cross platform Popup Menu.

I spend a lot of time in creating views, like this and to create a high quality view cost a lot of time. If you want to support me and further views, then you can do it here by Paypal. :)

Left: B4J Right: B4A

View attachment 99402View attachment 99404View attachment 99405View attachment 103495View attachment 107567
ASPopupMenu
Author: Alexander Stolte
Version: 1.08

  • ASPM_ItemLabelProperties
    • Fields:
      • BackgroundColor As Int
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • ItemBackgroundColor As Int
      • LeftRightPadding As Float
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • xFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASPM_TitleLabelProperties
    • Fields:
      • BackgroundColor As Int
      • Height As Float
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • ItemBackgroundColor As Int
      • LeftRightPadding As Float
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • xFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASPopupMenu
    • Events:
      • ItemClicked (Index As Int, Tag As Object)
    • Fields:
      • AutoHideMs As Int
      • CloseDurationMs As Int
      • OpenDurationMs As Int
    • Functions:
      • AddMenuItem (text As String, tag As Object) As String
      • AddTitle (Text As String, height As Float) As String
      • Class_Globals As String
      • Clear As String
        clears the list
      • CloseMenu As String
      • CreateASPM_ItemLabelProperties (TextColor As Int, xFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String, BackgroundColor As Int, ItemBackgroundColor As Int, LeftRightPadding As Float) As ASPM_ItemLabelProperties
      • CreateASPM_TitleLabelProperties (TextColor As Int, xFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String, BackgroundColor As Int, ItemBackgroundColor As Int, LeftRightPadding As Float, Height As Float) As ASPM_TitleLabelProperties
      • getBase As B4XView
      • getisOpen As Boolean
        checks if the menu is open
      • getItemLabelProperties As ASPM_ItemLabelProperties
        change the label properties, call it before you add items
        <code>ASScrollingTags1.LabelProperties.xFont = xui.CreateDefaultBoldFont(15)</code>
      • GetMenuItemAt_Background (index As Int) As B4XView
        gets a menu item background (parent of label)
      • GetMenuItemAt_Label (index As Int) As B4XView
        gets a menu item label - the label with the text
      • getOrientationHorizontal_LEFT As String
      • getOrientationHorizontal_MIDDLE As String
      • getOrientationHorizontal_RIGHT As String
      • getOrientationVertical_BOTTOM As String
      • getOrientationVertical_TOP As String
        Vertical = Top,Bottom
        Horizontal = Left,Middle,Right
      • getSize As Int
        gets the list size
      • getTitleLabelProperties As ASPM_TitleLabelProperties
        change the label properties, call it before you add the title
        <code>ASScrollingTags1.TitleLabelProperties.xFont = xui.CreateDefaultBoldFont(20)</code>
      • Initialize (Parent As B4XView, CallBack As Object, EventName As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • OpenMenu (view As B4XView, width As Float)
        Opens the menu on a view
      • OpenMenu2 (parent As B4XView, width As Float)
        Open the menu on center of parent/view
      • RemoveTitle As String
        Removes the title if exists
      • Resize (parent_width As Float, parent_height As Float) As String
      • setActivityHasActionBar (value As Boolean) As String
      • setCloseAfterItemClick (enabled As Boolean) As String
        closes the menu automatically after clicking on an item
        standard is True
      • setDividerColor (color As Int) As String
        the color of the dividers
      • setDividerEnabled (enable As Boolean) As String
        Adds or Removes the dividers
      • setDividerHeight (height As Float) As String
        the height of the dividers
      • setIsInSpecialContainer (value As Boolean) As String
        set it true if the target is on a listview or as a child on a panel where the left and top values differ from the form
      • setItemBackgroundColor (crl As Int) As String
        sets the item background color for all items
      • setMenuCornerRadius (radius As Int) As String
      • setOrientationHorizontal (orientation As String) As String
      • setOrientationVertical (orientation As String) As String
      • ViewScreenPosition (view As B4XView) As Int()
    • Properties:
      • ActivityHasActionBar
      • Base As B4XView [read only]
      • CloseAfterItemClick
        closes the menu automatically after clicking on an item
        standard is True
      • DividerColor
        the color of the dividers
      • DividerEnabled
        Adds or Removes the dividers
      • DividerHeight
        the height of the dividers
      • IsInSpecialContainer
        set it true if the target is on a listview or as a child on a panel where the left and top values differ from the form
      • isOpen As Boolean [read only]
        checks if the menu is open
      • ItemBackgroundColor
        sets the item background color for all items
      • ItemLabelProperties As ASPM_ItemLabelProperties [read only]
        change the label properties, call it before you add items
        <code>ASScrollingTags1.LabelProperties.xFont = xui.CreateDefaultBoldFont(15)</code>
      • MenuCornerRadius
      • OrientationHorizontal
      • OrientationHorizontal_LEFT As String [read only]
      • OrientationHorizontal_MIDDLE As String [read only]
      • OrientationHorizontal_RIGHT As String [read only]
      • OrientationVertical
      • OrientationVertical_BOTTOM As String [read only]
      • OrientationVertical_TOP As String [read only]
        Vertical = Top,Bottom
        Horizontal = Left,Middle,Right
      • Size As Int [read only]
        gets the list size
      • TitleLabelProperties As ASPM_TitleLabelProperties [read only]
        change the label properties, call it before you add the title
        <code>ASScrollingTags1.TitleLabelProperties.xFont = xui.CreateDefaultBoldFont(20)</code>
Changelog
  • 1.00
    • Release
  • 1.01
    • Adds background_color global variable - the background color of the parent view during the menu is open
    • Adds setItemBackgroundColor - change the items background color
    • Better Handling in "Nested Layouts"
    • Add ActivityHasActionBar - set to true if you have a ActionBar enabled
    • Add IsInSpecialContainer - set it true if the target is on a listview or as a child on a panel where the left and top values differ from the form
    • Add setOrientationVertical
    • Add setOrientationHorizontal
    • Adds "Enums" for Orientations -TOP,BOTTOM -LEFT,MIDDLE,RIGHT
  • 1.02
    • Add OpenMenu2 - Opens the menu in center of the parent view
    • Add Clear - clear all
    • Add getBase - gets the base view to customize it
    • Add getLabelProperties - customize it if you want, before you add a new menu item
      • View attachment 103494
      • this is now possible
        • aspm_main.LabelProperties.ItemBackgroundColor = xui.Color_ARGB(255,Rnd(1,256), Rnd(1,256), Rnd(1,256))
    • Remove background_color and itembackground_color
      • Added to getLabelProperties
    • Add GetMenuItemAt_Label
    • Add GetMenuItemAt_Background
    • Add getSize
    • Add setMenuCornerRadius - sets the corner radius for the menu (works only in B4A and B4I)
  • 1.03
    • Add LeftRightPadding to ASPM_LabelProperties - label padding to have more space left and right for example HorizontalCenter = LEFT
    • OpenMenu the background is now smoother on show
    • setMenuCornerRadius is now available on B4J (thanks @Erel)
  • 1.04
    • getLabelProperties is renamed to getItemLabelProperties
    • Add AddTitle - you can now add a title to the menu
      • Add TitleLabelProperties - you can change the title properties with it
    • Add RemoveTitle - Removes the title if exists
    • Add AutoHideMs
    • Add DividerEnabled - you can now show dividers between the items
      • Add DividerHeight - the height of the dividers
      • Add DividerColor - the color of the dividers
  • 1.05
    • OpenMenu Show Animation with the background is now animated
    • BugFixes
  • 1.06
    • BugFixes
  • 1.07
    • Add get isOpen - checks if the menu is open
    • BugFix - if you called OpenMenu several times without closing the menu, then the menu was added several times
    • Add set CloseAfterItemClick - closes the menu automatically after clicking on an item
      • standard is True
    • Add set and get CloseDurationMs - the duration it takes for the menu to be completely closed
    • Add set and get OpenDurationMs - the duration it takes for the menu to be fully visible
  • 1.08
    • Intern Function IIF renamed to iif2
Have Fun :)
I downloaded your b4a example and unzipped it into a folder.
When loading the B4A project, it shows the following message:

[IDE message - 7:55:13]
The following modules are missing:
C:\Projects\B4A\ASPopupMenu.bas

It definitely is missing from the example project.

Could you please correct it and re-upload?

Thanx,
Mark Stuart
 

Rubsanpe

Active Member
Licensed User
I downloaded your b4a example and unzipped it into a folder.
When loading the B4A project, it shows the following message:

[IDE message - 7:55:13]
The following modules are missing:
C:\Projects\B4A\ASPopupMenu.bas

It definitely is missing from the example project.

Could you please correct it and re-upload?

Thanx,
Mark Stuart
Hi, you need download and use the b4xlib from first post.

Rubén
 

mfstuart

Active Member
Licensed User
Hi, you need download and use the b4xlib from first post.

Rubén
I had put it in the Additional Libraries folder instead of the Libraries folder.
And I had to reselect the library in the project.
Thanx for your help.
Mark Stuart
 
Top