public class ExpandableFab
The design and behavior of a Floating Action Button which can animate and expand to show
optional class FabOption
s when clicked. It's the focal point for the ExpandableFab widget's
functionality, from an end-user's perspective.
Developer Notes:
Layout_width and layout_height should be set to wrap_content, unless you're setting custom dimensions.
ExpandableFabs must be defined within an class ExpandableFabLayout
to function properly.
label.labelText must be non-null for the optional label to show and other label properties to take effect.
Implementation Notes:
Since the Kotlin 'internal' modifier translates to 'public' in Java, the JvmSynthetic annotation is used on those functions and properties to hide them from the published API for Java clients. A proper solution to this issue would be a package-private visibility modifier, but Kotlin has yet to implement it (https://youtrack.jetbrains.com/issue/KT-29227). Until then, the JvmSynthetic annotations should remain in order to present the proper published API to both Java & Kotlin clients.
public ExpandableFab(@NotNull android.content.Context context, @Nullable Orientation orientation)
Used to create an ExpandableFab programmatically (do not use the other constructor ExpandableFab(context, attributeSet) - it is for use by the Android framework when inflating an ExpandableFab via XML). This constructor keeps all optional properties of an ExpandableFab and its optional label at their default values, though you can always change these values after instantiation by using the appropriate setter methods (with the exception of orientation, which cannot be changed after instantiation).
See documentation for an exhaustive list of all optional properties and their default values.
Please review the Notes documented at the top of the class for guidelines and limitations when using ExpandableFab.
public ExpandableFab(@NotNull android.content.Context context, @NotNull android.util.AttributeSet attributeSet)
Called by the system when creating an ExpandableFab via XML (don't call this directly). To create an ExpandableFab programmatically, use the ExpandableFab(context, orientation) constructor.
@NotNull public Orientation getOrientation()
The enum Orientation
this ExpandableFab is viewable in. Default value is Orientation.PORTRAIT.
enum Orientation
public int getEfabColor()
The color of the ExpandableFab. Default value is your app's colorAccent.
Usage of this property is preferred over the inherited setBackgroundColor and backgroundTintList methods.
public void setEfabColor(int value)
The color of the ExpandableFab. Default value is your app's colorAccent.
Usage of this property is preferred over the inherited setBackgroundColor and backgroundTintList methods.
@Nullable public android.graphics.drawable.Drawable getEfabIcon()
The drawable to show as the ExpandableFab's icon. Default value is a white plus sign vector drawable.
Usage of this property is preferred over the inherited set/getImageXXX methods.
public void setEfabIcon(@Nullable android.graphics.drawable.Drawable value)
The drawable to show as the ExpandableFab's icon. Default value is a white plus sign vector drawable.
Usage of this property is preferred over the inherited set/getImageXXX methods.
@NotNull public FabSize getEfabSize()
The size of this ExpandableFab (NOT its FabOptions. For that, see property fabOptionSize
).
Must be FabSize.MINI, FabSize.NORMAL, FabSize.AUTO or FabSize.CUSTOM.
FabSize.CUSTOM should be used when you're setting the size of the ExpandableFab's
layout_width and layout_height to a custom value manually (when using CUSTOM, make sure to
also set app:fabCustomSize equal to your custom layout_width/layout_height size and
app:maxImageSize equal to your icon size in order to ensure your icon is centered
properly). Default value is FabSize.NORMAL.
Usage of this property is preferred over the inherited set/getSize methods.
fabOptionSize
public void setEfabSize(@NotNull FabSize value)
The size of this ExpandableFab (NOT its FabOptions. For that, see property fabOptionSize
).
Must be FabSize.MINI, FabSize.NORMAL, FabSize.AUTO or FabSize.CUSTOM.
FabSize.CUSTOM should be used when you're setting the size of the ExpandableFab's
layout_width and layout_height to a custom value manually (when using CUSTOM, make sure to
also set app:fabCustomSize equal to your custom layout_width/layout_height size and
app:maxImageSize equal to your icon size in order to ensure your icon is centered
properly). Default value is FabSize.NORMAL.
Usage of this property is preferred over the inherited set/getSize methods.
fabOptionSize
public boolean getEfabEnabled()
The enabled state of this ExpandableFab and its label. Disabled ExpandableFabs and labels will be visually distinct and unclickable. Default value is true (enabled).
Usage of this property is preferred over the inherited is/setEnabled methods.
NOTE: If you disable an ExpandableFab and its label, remember to re-enable it before trying to update one of its properties. For example, disabling an ExpandableFab then manually changing its background color will not automatically re-enable the ExpandableFab. It, and its label, will remain disabled.
public void setEfabEnabled(boolean value)
The enabled state of this ExpandableFab and its label. Disabled ExpandableFabs and labels will be visually distinct and unclickable. Default value is true (enabled).
Usage of this property is preferred over the inherited is/setEnabled methods.
NOTE: If you disable an ExpandableFab and its label, remember to re-enable it before trying to update one of its properties. For example, disabling an ExpandableFab then manually changing its background color will not automatically re-enable the ExpandableFab. It, and its label, will remain disabled.
public float getIconAnimationRotationDeg()
A float, in degrees, representing how much the ExpandableFab's icon will rotate when animating. When opening, the ExpandableFab will rotate from 0 to this value. When closing, the icon will rotate from this value to its initial position of 0. Default value is -135f.
public void setIconAnimationRotationDeg(float p)
A float, in degrees, representing how much the ExpandableFab's icon will rotate when animating. When opening, the ExpandableFab will rotate from 0 to this value. When closing, the icon will rotate from this value to its initial position of 0. Default value is -135f.
@NotNull public FabSize getFabOptionSize()
The size of each FabOption in this orientation (NOT the size of the ExpandableFab. For that,
see property efabSize
). Must be FabSize.MINI, FabSize.NORMAL, FabSize.AUTO or
FabSize.CUSTOM. FabSize.CUSTOM should be used when you're setting the size of the
FabOptions' layout_width and layout_height to a custom value manually (when using CUSTOM,
make sure to also set app:fabCustomSize equal to your custom layout_width/layout_height
size and app:maxImageSize equal to your icon size in order to ensure your icon is centered
properly). Default value is FabSize.MINI.
Usage of this property is preferred over the inherited set/getSize methods on individual FabOptions.
efabSize
public void setFabOptionSize(@NotNull FabSize p)
The size of each FabOption in this orientation (NOT the size of the ExpandableFab. For that,
see property efabSize
). Must be FabSize.MINI, FabSize.NORMAL, FabSize.AUTO or
FabSize.CUSTOM. FabSize.CUSTOM should be used when you're setting the size of the
FabOptions' layout_width and layout_height to a custom value manually (when using CUSTOM,
make sure to also set app:fabCustomSize equal to your custom layout_width/layout_height
size and app:maxImageSize equal to your icon size in order to ensure your icon is centered
properly). Default value is FabSize.MINI.
Usage of this property is preferred over the inherited set/getSize methods on individual FabOptions.
efabSize
@NotNull public FabOptionPosition getFabOptionPosition()
How each FabOption in this orientation will be positioned relative to the previous FabOption. Default value is FabOptionPosition.ABOVE.
public void setFabOptionPosition(@NotNull FabOptionPosition p)
How each FabOption in this orientation will be positioned relative to the previous FabOption. Default value is FabOptionPosition.ABOVE.
public float getFirstFabOptionMarginPx()
The margin (in pixels as a positive float) between the first FabOption in this orientation
and the ExpandableFab itself. Depending on the size you set for the ExpandableFab, you may
want this margin to be different than successiveFabOptionMarginPx
. Default value is 80f.
successiveFabOptionMarginPx
public void setFirstFabOptionMarginPx(float value)
The margin (in pixels as a positive float) between the first FabOption in this orientation
and the ExpandableFab itself. Depending on the size you set for the ExpandableFab, you may
want this margin to be different than successiveFabOptionMarginPx
. Default value is 80f.
successiveFabOptionMarginPx
public float getSuccessiveFabOptionMarginPx()
The margin (in pixels as a positive float) between successive FabOptions in this
ExpandableFab orientation. See firstFabOptionMarginPx
if trying to set the margin
between the first FabOption in this orientation and the ExpandableFab itself. Default value
is 75f.
firstFabOptionMarginPx
public void setSuccessiveFabOptionMarginPx(float value)
The margin (in pixels as a positive float) between successive FabOptions in this
ExpandableFab orientation. See firstFabOptionMarginPx
if trying to set the margin
between the first FabOption in this orientation and the ExpandableFab itself. Default value
is 75f.
firstFabOptionMarginPx
public long getOpeningAnimationDurationMs()
The duration (in milliseconds as a positive long) of the ExpandableFab's opening animations. Default value is 250L.
public void setOpeningAnimationDurationMs(long value)
The duration (in milliseconds as a positive long) of the ExpandableFab's opening animations. Default value is 250L.
public long getClosingAnimationDurationMs()
The duration (in milliseconds as a positive long) of the ExpandableFab's closing animations. Default value is 500L.
public void setClosingAnimationDurationMs(long value)
The duration (in milliseconds as a positive long) of the ExpandableFab's closing animations. Default value is 500L.
public float getClosingAnticipateTension()
The tension (as a positive float) applied on the ExpandableFab's icon to mimic an AnticipateInterpolator when it's playing its closing animations. An AnticipateInterpolator allows us to have a closing animation where the ExpandableFab's icon will begin rotating slightly backwards, before smoothly rotating forward to its default 0 degree rotation. Every multiple of 10f will be a full 360 degree rotation backwards. Default value is 2f.
public void setClosingAnticipateTension(float value)
The tension (as a positive float) applied on the ExpandableFab's icon to mimic an AnticipateInterpolator when it's playing its closing animations. An AnticipateInterpolator allows us to have a closing animation where the ExpandableFab's icon will begin rotating slightly backwards, before smoothly rotating forward to its default 0 degree rotation. Every multiple of 10f will be a full 360 degree rotation backwards. Default value is 2f.
@NotNull public Label getLabel()
The optional label attached to this ExpandableFab. The label will only be shown when its labelText is not null. Default values for the label are as follows:
labelText = null labelTextColor = white labelTextSize = 14sp labelBackgroundColor = gray (#333333) labelElevation = 6dp position = LabelPosition.LEFT marginPx = 50f translationPx = 100f visibleToHiddenAnimationDurationMs = 125L hiddenToVisibleAnimationDurationMs = 250L overshootTension = 3.5f
public void setOnClickListener(@Nullable android.view.View.OnClickListener onClickListener)
Registers a callback to be invoked when this ExpandableFab or its label is clicked. The default behavior the ExpandableFab will be executed before this custom callback.
protected void onDetachedFromWindow()
Called when the view is detached from a window. At this point it no longer has a surface for drawing. Stops any animations on the ExpandableFab, as it's no longer on screen.
public void show()
Shows the ExpandableFab and optional label.
public void hide()
Hides the ExpandableFab and optional label.
public void setSize(int size)
Sets the size of the ExpandableFab. Overridden to ensure we never set the size to be FabSize.CUSTOM.
Clients should never need to call this directly. Instead, set ExpandableFab.efabSize
.
ExpandableFab.efabSize