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:

mfstuart

Active 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
Hi, you need download and use the b4xlib from first post.

Rubén
 

mfstuart

Active 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…