B4A Class [B4X] [XUI] AS Popup Menu

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:

Mark Stuart

Well-Known Member
Licensed User
Longtime 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
 

Rubsanpe

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

Rubén
 

Mark Stuart

Well-Known Member
Licensed User
Longtime 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
 

AlexMaa

Member
Licensed User
Longtime User
 

Alexander Stolte

Expert
Licensed User
Longtime User
Update
  • 1.09
    • Add set MenuViewGap - sets the gap between the menu and the attached view
    • Add get TriangleProperties
    • Add set ShowTriangle - only visible if you open the menu with OpenMenu
      • Default: False

Example:
B4X:
aspma_Main.MenuViewGap = aspma_Main.TriangleProperties.Height + 2dip
aspma_Main.ShowTriangle = True
aspma_Main.TriangleProperties.Left = 150dip/2 - aspma_Main.TriangleProperties.Width/2 'Middle

Can you add something like the image below ??
yes
 

james_sgp

Active Member
Licensed User
Longtime User
B4i sample is crashing for me on iOS15.2, menu appears when I click on the button, any subsequent click crashes.

B4X:
Copying updated assets files (1)
Application_Start
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
Application_Active
Error occurred on line: 529 (ASPopupMenu)
Object was not initialized (UIView)
Stack Trace: (
  CoreFoundation       __exceptionPreprocess + 242
  libobjc.A.dylib      objc_exception_throw + 48
  CoreFoundation       -[NSException initWithCoder:] + 0
  B4i Example          -[B4IObjectWrapper object] + 111
  B4i Example          -[B4XViewWrapper setVisible:] + 40
  B4i Example          -[b4i_aspopupmenu _closemenu:] + 379
  B4i Example          -[b4i_aspopupmenu _xpnl_touch_click:] + 301
  CoreFoundation       __invoking___ + 140
  CoreFoundation       -[NSInvocation invoke] + 305
  B4i Example          +[B4I runDynamicMethod:method:throwErrorIfMissing:args:] + 1519
 B4i Example          -[B4IShell runMethod:] + 380
 B4i Example          -[B4IShell raiseEventImpl:method:args::] + 1566
 B4i Example          -[B4IShellBI raiseEvent:event:params:] + 1358
 B4i Example          __33-[B4I raiseUIEvent:event:params:]_block_invoke + 51
 libdispatch.dylib    _dispatch_call_block_and_release + 12
 libdispatch.dylib    _dispatch_client_callout + 8
 libdispatch.dylib    _dispatch_main_queue_callback_4CF + 1075
 CoreFoundation       __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
 CoreFoundation       __CFRunLoopRun + 2772
 CoreFoundation       CFRunLoopRunSpecific + 567
 GraphicsServices     GSEventRunModal + 139
 UIKitCore            -[UIApplication _run] + 928
 UIKitCore            UIApplicationMain + 101
 B4i Example          main + 104
 dyld                 start_sim + 10
 ???                  0x0 + 1
)
 

james_sgp

Active Member
Licensed User
Longtime User
Hi,

I`m now also getting an error in the B4A version too, seems to be the same as the B4i error I mentioned earlier. Can you advise what issue is? :
B4X:
Error occurred on line: 529 (ASPopupMenu)
java.lang.RuntimeException: Object should first be initialized (B4XView).
    at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:67)
    at anywheresoftware.b4a.objects.B4XViewWrapper.asViewWrapper(B4XViewWrapper.java:89)
    at anywheresoftware.b4a.objects.B4XViewWrapper.setVisible(B4XViewWrapper.java:115)
    at com.as.popupmenu.aspopupmenu._closemenu(aspopupmenu.java:1456)
    at com.as.popupmenu.aspopupmenu._clickitem(aspopupmenu.java:1376)
    at com.as.popupmenu.aspopupmenu._item_click(aspopupmenu.java:1938)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
    at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
    at android.view.View.performClick(View.java:8160)
    at android.view.View.performClickInternal(View.java:8137)
    at android.view.View.access$3700(View.java:888)
    at android.view.View$PerformClick.run(View.java:30236)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:246)
    at android.app.ActivityThread.main(ActivityThread.java:8653)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
** Activity (main) Pause event (activity is not paused). **
** Service (starter) Destroy (ignored)**
 

Alexander Stolte

Expert
Licensed User
Longtime User
Update
  • 1.11
    • Add OpenMenuAdvanced - You can set the Left, Top and Width value to show the menu on the parent
    • Add MenuHeight - gets the MenuHeight even if the menu is not yet visible
    • BugFixes
Example project where the new props. are used:
 

Daica

Active Member
Licensed User
I noticed that when you use Open2(Root, 250dip) and have 6+ items, the popup goes up further and further on the screen instead of being in the center.

I use the OpenMenuAdvance to center the menu instead but just wanted to let you know
 
Last edited:

Daica

Active Member
Licensed User
Hi Alex, do you think it would be possible to add an option to add more than 1 title to the pop up so tat we could maybe split the popup into sections?

For example:

Section 1 [Title]
Item 1
Item 2
Section 2 [Title]
Item 1
Item 2
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…