B4A Library Floating Action Menu (FAM) and Floating Action Button (FAB)

Discussion in 'Additional libraries, classes and official updates' started by DonManfred, Mar 25, 2016.

  1. DonManfred

    DonManfred Expert Licensed User

    This is a wrap for this Github Project. Thanx to @ivan.tellez for pointing me into it :)
    The library is a replacement for the Floating Action Button lib by @corwin42
    They are not compatible as we are both using the same Objectname (FloatingActionbutton).

    Requires B4A Version 5.8+

    FloatingActionButton
    Author:
    DonManfred (wrapper)
    Version: 1.02
    • FloatingActionButton
      Fields:
      • ba As BA
      Methods:
      • BringToFront
      • DesignerCreateView (base As PanelWrapper, lw As LabelWrapper, props As Map)
      • Initialize (EventName As String)
      • Invalidate
      • Invalidate2 (arg0 As Rect)
      • Invalidate3 (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
      • IsInitialized As Boolean
      • RemoveView
      • RequestFocus As Boolean
      • SendToBack
      • SetBackgroundImage (arg0 As Bitmap)
      • SetColorAnimated (arg0 As Int, arg1 As Int, arg2 As Int)
      • SetLayout (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
      • SetLayoutAnimated (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int, arg4 As Int)
      • SetVisibleAnimated (arg0 As Int, arg1 As Boolean)
      • hasShadow As Boolean
      • hide (animate As Boolean)
        Makes the <b>FloatingActionButton</b> to disappear and sets its visibility to {@link #INVISIBLE}
        animate: if true - plays "hide animation"
      • hideButtonInMenu (animate As Boolean)
        <b>This will clear all AnimationListeners.</b>
      • hideProgress
      • isHidden As Boolean
        Checks whether <b>FloatingActionButton</b> is hidden
        Return type: @return:true if <b>FloatingActionButton</b> is hidden, false otherwise
      • isProgressBackgroundShown As Boolean
      • isProgressIndeterminate As Boolean

        Return type: @return:the mProgressIndeterminate
      • setProgress (progress As Int, animate As Boolean)
      • show (animate As Boolean)
        Makes the <b>FloatingActionButton</b> to appear and sets its visibility to {@link #VISIBLE}
        animate: if true - plays "show animation"
      • showButtonInMenu (animate As Boolean)
      • toggle (animate As Boolean)
      Properties:
      • Background As Drawable
      • ButtonSize As Int
        Sets the size of the <b>FloatingActionButton</b> and invalidates its layout.
      • Color As Int [write only]
      • ColorDisabled As Int
      • ColorNormal As Int
      • ColorPressed As Int
      • ColorRipple As Int
      • Elevation As Float [write only]
      • ElevationCompat As Float [write only]
        Sets the shadow color and radius to mimic the native elevation.

        <p><b>API 21+</b>: Sets the native elevation of this view, in pixels. Updates margins to
        make the view hold its position in layout across different platform versions.</p>
      • Enabled As Boolean
      • Height As Int
      • HideAnimation As Animation [write only]
      • IconDrawable As String [write only]
      • ImageDrawable As Drawable [write only]
      • Indeterminate As Boolean [write only]
        <p>Change the indeterminate mode for the progress bar. In indeterminate
        mode, the progress is ignored and the progress bar shows an infinite
        animation instead.</p>
      • LabelText As String
      • LabelVisibility As Int
      • Left As Int
      • Max As Int
      • Parent As Object [read only]
      • Progress As Int [read only]
      • ProgressBackgroundColor As Int
      • ProgressColor As Int
      • ProgressWidth As Int
      • ShadowColor As Int
      • ShadowRadius As Int
        Sets the shadow radius of the <b>FloatingActionButton</b> and invalidates its layout.
        <p>
        Must be specified in density-independent (dp) pixels, which are then converted into actual
        pixels (px).
      • ShadowXOffset As Int
        Sets the shadow x offset of the <b>FloatingActionButton</b> and invalidates its layout.
        <p>
        Must be specified in density-independent (dp) pixels, which are then converted into actual
        pixels (px).
      • ShadowYOffset As Int
        Sets the shadow y offset of the <b>FloatingActionButton</b> and invalidates its layout.
        <p>
        Must be specified in density-independent (dp) pixels, which are then converted into actual
        pixels (px).
      • ShowAnimation As Animation [write only]
      • ShowProgressBackground As Boolean [write only]
      • ShowShadow As Boolean [write only]
      • Tag As Object
      • Top As Int
      • Visible As Boolean
      • Width As Int
    • FloatingActionMenu
      Events:
      • onClick (obj As View)
      • onMenuToggle (opened As Boolean)
      Fields:
      • ba As BA
      Methods:
      • BringToFront
      • DesignerCreateView (base As PanelWrapper, lw As LabelWrapper, props As Map)
      • Initialize (EventName As String)
      • Invalidate
      • Invalidate2 (arg0 As Rect)
      • Invalidate3 (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
      • IsInitialized As Boolean
      • RemoveView
      • RequestFocus As Boolean
      • SendToBack
      • SetBackgroundImage (arg0 As Bitmap)
      • SetColorAnimated (arg0 As Int, arg1 As Int, arg2 As Int)
      • SetLayout (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
      • SetLayoutAnimated (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int, arg4 As Int)
      • SetVisibleAnimated (arg0 As Int, arg1 As Boolean)
      • addMenuButton (fab As FloatingActionButton)
      • addMenuButton2 (fab As FloatingActionButton, index As Int)
      • close (animate As Boolean)
      • hideMenu (animate As Boolean)
        Makes the {@link #FloatingActionMenu} to disappear and sets its visibility to {@link #INVISIBLE}
        animate: if true - plays "hide animation"
      • hideMenuButton (animate As Boolean)
        Makes the {@link FloatingActionButton} to disappear inside the {@link #FloatingActionMenu} and
        sets its visibility to {@link #INVISIBLE}
        animate: if true - plays "hide animation"
      • isAnimated As Boolean
      • isIconAnimated As Boolean
      • isMenuButtonHidden As Boolean
      • isMenuHidden As Boolean
      • isOpened As Boolean
      • open (animate As Boolean)
      • removeAllMenuButtons
      • removeMenuButton (fab As FloatingActionButton)
      • showMenu (animate As Boolean)
        Makes the whole {@link #FloatingActionMenu} to appear and sets its visibility to {@link #VISIBLE}
        animate: if true - plays "show animation"
      • showMenuButton (animate As Boolean)
        Makes the {@link FloatingActionButton} to appear inside the {@link #FloatingActionMenu} and
        sets its visibility to {@link #VISIBLE}
        animate: if true - plays "show animation"
      • toggle (animate As Boolean)
      • toggleMenu (animate As Boolean)
      • toggleMenuButton (animate As Boolean)
      Properties:
      • ActivityHeight As Int [write only]
      • ActivityWidth As Int [write only]
      • Animated As Boolean [write only]
        Sets whether open and close actions should be animated
      • AnimationDelayPerItem As Int
      • Background As Drawable
      • ClosedOnTouchOutside As Boolean [write only]
      • Color As Int [write only]
      • Enabled As Boolean
      • Height As Int
      • IconAnimated As Boolean [write only]
      • IconAnimationCloseInterpolator As Interpolator [write only]
      • IconAnimationInterpolator As Interpolator [write only]
        Sets the {@link android.view.animation.Interpolator} for <b>FloatingActionButton's</b> icon animation.
      • IconAnimationOpenInterpolator As Interpolator [write only]
      • IconToggleAnimatorSet As AnimatorSet
      • LabelsCornerRadius As Int
      • LabelsMargin As Int
      • LabelsMaxLines As Int
      • LabelsPaddingBottom As Int
      • LabelsPaddingLeft As Int
      • LabelsPaddingRight As Int
      • LabelsPaddingTop As Int
      • LabelsPosition As Int
      • Left As Int
      • MenuButtonColorNormal As Int
      • MenuButtonColorPressed As Int
      • MenuButtonColorRipple As Int
      • MenuButtonHideAnimation As Animation [write only]
      • MenuButtonLabelText As String
      • MenuButtonShowAnimation As Animation [write only]
      • MenuIconView As ImageView [read only]
      • OpenDirection As Int
      • Parent As Object [read only]
      • Tag As Object
      • Top As Int
      • Visible As Boolean
      • Width As Int

    Known problems:
    - I still don´t know what the problem is, but the first 2 FABs (FloatingActionButton) added to the FAM (FloatingActionMenu)will be ignored; they do not show in menu
    But away from this it works fine here

    Screenshot_20160325-080229.png

    If you want to donate for my work building the wrapper you can do it here: [​IMG]
     

    Attached Files:

    Last edited: Apr 3, 2016
  2. moster67

    moster67 Expert Licensed User

    Nice one!
     
  3. MarcoRome

    MarcoRome Expert Licensed User

    10+ ;)
    Fantastic Menu.
    Thanks Don
     
  4. ArminKH

    ArminKH Well-Known Member

    thank u
    and it seems first time mButtonsCount variable is -2 see this
    Code:
    public void addMenuButton(FloatingActionButton fab, int index) {
            int size = mButtonsCount - 
    2;
            
    if (index < 0) {
                index = 
    0;
            
    } else if (index > size) {
                index = size;
            }

            addView(fab, index);
            mButtonsCount++;
            addLabel(fab);
        }
    i think when for first time we want to add 5 button then the size will be -2 (because mButtonsCount is 0 and mButtonsCount - 2 is equal to -2)so it's ignore 2 button for first time
    so when we add 7 button then size is 5 and 5 items will be added
    try to add first item at index -1 then u can see 4 of 5 button will be shown
    i don't know but any way i think it's relevant to mButtonsCount variable
    I think mButtonsCount should be 2 as default to solve this problem
    thank u for this great lib
     
    Last edited: Mar 25, 2016
  5. johndb

    johndb Active Member Licensed User

    Thank you @DonManfred! Does this Floating Action Button have the provision to link to a list in order provide automatic hide (animated move below screen) when the listview is scrolled to the bottom? I am using @corwin42's FloatingActionButton with @Informatix's ULV and it works rather well but would like to replace it with this one but I rely on this feature.

    John
     
  6. DonManfred

    DonManfred Expert Licensed User

    This should be possible already. Will create a similar example app for this this weekend
     
    konradwalsh and johndb like this.
  7. woniol

    woniol Active Member Licensed User

    Looks nice, but when I try the example i get this
    Code:
    4A version: 5.80
    Parsing code.    Error
    Error parsing program.
    Error description: Unknown 
    type: floatingactionmenu
    Are you missing a library reference?
    Occurred on line: 
    26 (Main)
    Private fam As FloatingActionMenu
     
  8. itgirl

    itgirl Active Member Licensed User

    Hello and thank you for this great Lib ,, but im having difficulties setting the fam on the right side of the activity even in the example if you just rotate the phone it gets in the middle of the activity ,,, im trying to set it manually not with the designer

    Code:
    fam.Initialize("fam")
    Activity.AddView(fam,0,0,100%x,100%y)
    fam.ActivityHeight =
    100%y
    fam.ActivityWidth = 
    100%x
    i tried to play with left setting ...

    Code:
    fam.left = 100dip
    is just not working it takes the whole fam 100dip from the left also i tried to give the fam 100dip width and the left as 100%x - 100dip but still no luck .... any ideas ?
     
    Last edited: Mar 25, 2016
  9. itgirl

    itgirl Active Member Licensed User

    did you copy the Lib files in your extra lib folders ?
     
    Johan Schoeman likes this.
  10. woniol

    woniol Active Member Licensed User

    itgirl likes this.
  11. Peter Simpson

    Peter Simpson Expert Licensed User

  12. itgirl

    itgirl Active Member Licensed User

    Ok i've found out whats the issue is ... i think it's related to gravity ... try to make the texts on FloatingActionButton smaller and you will notice the FAM got closer to the left edges so you need to put in a really long text so the FAM stick to the right side .... any solution on this one


    my solution was to put a really long text in the first FAB as the first and second already dont show in the menu...
     
    konradwalsh likes this.
  13. DonManfred

    DonManfred Expert Licensed User

    ;-) Nice idea...
    I was facing similar problems. As of yet i did not found the point to change. Still investigating
     
  14. itgirl

    itgirl Active Member Licensed User

    i know lol but still not a very good approach because as of some RTL languages it seems to be a problem

    do you think the layout has anything to do with it ?

    Code:
    <com.github.clans.fab.FloatingActionButton
            android:
    id="@+id/fab"
            android:layout_width=
    "wrap_content"
            android:layout_height=
    "wrap_content"
            android:layout_gravity=
    "bottom|right"
            android:layout_marginBottom=
    "8dp"
            android:layout_marginRight=
    "8dp"
            android:src=
    "@drawable/ic_menu"
            fab:fab_colorNormal=
    "@color/app_primary"
            fab:fab_colorPressed=
    "@color/app_primary_pressed"
            fab:fab_colorRipple=
    "@color/app_ripple"/>
    as you can see in the main project the gravity is set to bottom|right
     
    DonManfred likes this.
  15. stanks

    stanks Active Member Licensed User

    so this works with android versions from....?
     
  16. DonManfred

    DonManfred Expert Licensed User

    I don´t know but i think 4+
     
  17. ilan

    ilan Expert Licensed User

    nice @DonManfred, is it possible to set the distance between the buttons?
     
    johndb likes this.
  18. asales

    asales Well-Known Member Licensed User

    You're right: 4+
    Works in Android 4.0.4.
    Don't works in Android 2.3.6.
     
  19. ArminKH

    ArminKH Well-Known Member

    upload_2016-3-27_12-49-9.png

    API Level: 14. Android 4.0 ( ICE_CREAM_SANDWICH )
     
    DonManfred likes this.
  20. stanks

    stanks Active Member Licensed User

    buttons can be added to mapfragment but not menu. any idea why? did you try that...maybe?

    thanks
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice