{"id":13639491,"url":"https://github.com/Scalified/fab","last_synced_at":"2025-04-19T22:32:56.376Z","repository":{"id":26749071,"uuid":"30206851","full_name":"Scalified/fab","owner":"Scalified","description":"Floating Action Button Library for Android","archived":false,"fork":false,"pushed_at":"2021-11-04T07:40:50.000Z","size":10203,"stargazers_count":848,"open_issues_count":8,"forks_count":164,"subscribers_count":64,"default_branch":"master","last_synced_at":"2024-11-09T09:38:25.404Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Scalified.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-02-02T20:28:03.000Z","updated_at":"2024-09-15T03:36:55.000Z","dependencies_parsed_at":"2022-08-31T08:20:09.719Z","dependency_job_id":null,"html_url":"https://github.com/Scalified/fab","commit_stats":null,"previous_names":["shell-software/fab"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Scalified%2Ffab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Scalified%2Ffab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Scalified%2Ffab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Scalified%2Ffab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Scalified","download_url":"https://codeload.github.com/Scalified/fab/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249822209,"owners_count":21329935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:01:01.368Z","updated_at":"2025-04-19T22:32:53.757Z","avatar_url":"https://github.com/Scalified.png","language":"Java","readme":"# Floating Action Button Library for Android\n\n[![Build Status](https://travis-ci.org/Scalified/fab.svg?branch=master)](https://travis-ci.org/Scalified/fab)\n[![Maven Central](https://img.shields.io/maven-central/v/com.scalified/fab.svg)](http://search.maven.org/#search|gav|1|g%3A%22com.scalified%22%20AND%20a%3A%22fab%22)\n[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-fab-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/1522)\n\n## Description\n\nThis Library contains implementation of the [**Floating Action Button**](http://www.google.com/design/spec/components/buttons.html#buttons-floating-action-button) for Android.\n\nFloating action buttons are used for a special type of promoted action. They are distinguished by a circled icon floating above the UI and have special motion behaviors related to morphing, launching, and the transferring anchor point.\n\n## Requirements\n\nThe Library requires **Android SDK version 9 (Gingerbread)** and higher.\n\n## Gradle Dependency\n\n```java\ndependencies {\n\tcompile 'com.scalified:fab:1.1.3'\n}\n```\n\n\u003e **Action Button** has a dependency on an external [**ViewMover**](https://github.com/Scalified/view-mover) library, which in turn has a transitive dependency on the [**UI Tools**](https://github.com/Scalified/uitools) library. \nIf any of these libraries are already used in the project they must be excluded as transitive dependencies\n\n## Activity Stream\n\n[**Full ChangeLog**](https://github.com/Scalified/fab/blob/master/CHANGELOG.md)\n\n### 1.1.3 - *current*\n\n1. Fixed [**issue #28**: move() method smearing on KitKat with snackbar](https://github.com/Scalified/fab/issues/28):\n\t* A fix was made within the dependent **ViewMover** library.\n\t  Only **ActionButton** dependency on **ViewMover** library was updated\n        \n2. Changed the standard Android logging API to **SLF4J Logging API**\n\n### 1.1.1 - *previous*\n\n1. Fixed [**issue #27**: Icon is outside the circle](https://github.com/Scalified/fab/issues/27):\n\n\tA call to **Canvas.restore()** without calling the **Canvas.save()** first resulted in the unpredictable behaviour.\n\tAdded call to **Canvas.save()** before **Canvas.restore()** in the **RippleEffectDrawer** class\n\n### Features in the next versions:\n\n* **2.0.0**:\n\n    1. **API** change. Major refactoring. **Deprecated API** removal.\n    2. New features - **confirmed**:\n\t\t* [**issue #13**: Request - Circular ProgressBar](https://github.com/Scalified/fab/issues/13)\n\t\n## Demo\n\nSubscribe the [**ActionButton YouTube Channel**](https://www.youtube.com/channel/UC_ER2kmJfAcGwt6V77i4uGg)\n\n### Button types\n\nFloating action buttons come in 3 sizes: \n\n* **DEFAULT (56dp)** - used in most cases\n* **MINI (40dp)** - used to create visual continuity with other elements on the screen\n* **BIG (72dp)** - additional button size, useful for large screens (not covered by Material Design)\n\nDEFAULT | MINI | BIG\n:-:|:-:|:-:\n![Default](https://github.com/Scalified/fab/blob/master/demo/button_type_default.png) | ![Mini](https://github.com/Scalified/fab/blob/master/demo/button_type_mini.png) | ![Big](https://github.com/Scalified/fab/blob/master/demo/button_type_big.png)\n\n### Color palette\n\nThe Library contains all of the colors **500** and **900** of the [**Material Color Palette**](http://www.google.com/design/spec/style/color.html#color-color-palette).\n\nColors **500** are used for the **NORMAL** button state while **900** ones for the **PRESSED** state:\n\nGreen 500 | Amber 500 | Blue 500\n:-:|:-:|:-:\n![Green 500](https://github.com/Scalified/fab/blob/master/demo/color_green.png) | ![Amber Color](https://github.com/Scalified/fab/blob/master/demo/color_amber.png) | ![Blue Grey](https://github.com/Scalified/fab/blob/master/demo/color_blue.png)\n\n### Shadow\n\nShadow **enabled** by default and has standard settings according to [**Material Design Guidelines**](http://www.google.com/design/spec/what-is-material/objects-in-3d-space.html). These settings are suitable in most cases. However, shadow can be modified in three ways: *radius*, *X-* or *Y-axis offset* and *color*.\n\nDefault | Radius | X- and Y- axis offset\n:-:|:-:|:-:\n![Default Shadow](https://github.com/Scalified/fab/blob/master/demo/default_shadow.png) | ![Shadow Radius](https://github.com/Scalified/fab/blob/master/demo/shadow_radius.png) | ![Shadow Offset](https://github.com/Scalified/fab/blob/master/demo/shadow_axis_offset.png)\n\n### Stroke\n\nStroke is **disabled** by default.\nStroke can be modified in two ways: *width* and *color*.\n\nThin | Medium | Thick\n:-:|:-:|:-:\n![Thin Stroke](https://github.com/Scalified/fab/blob/master/demo/stroke_thin.png) | ![Medium Stroke](https://github.com/Scalified/fab/blob/master/demo/stroke_medium.png) | ![Thick Stroke](https://github.com/Scalified/fab/blob/master/demo/stroke_thick.png)\n\n### Effects\n\n#### Shadow Responsive Effect\n\nShadow Responsive Effect means that shadow is changed in response to the user input.\nShadow Responsive Effect **enabled** by default.\n\n#### Ripple Effect\n\nA touch Ripple Effect indicates where and when a touch occurs within the **ActionButton** and acknowledges that the touch input was received.\nRipple Effect **disabled** by default.\n\nShadow Responsive Effect | Ripple Effect\n:-:|:-:\n![Shadow Responsive Effect](https://github.com/Scalified/fab/blob/master/demo/shadow_responsive_effect.gif) | ![Ripple Effect](https://github.com/Scalified/fab/blob/master/demo/ripple_effect.gif)\n\n### Moving\n\n**ActionButton** can be moved in any direction. [**ViewMover Library**](https://github.com/Scalified/viewmover) is used for performing the **ActionButton** moving\n\nLeft-Right Move | Up-Down Move\n:-:|:-:\n![Left-Right Move](https://github.com/Scalified/fab/blob/master/demo/move_left_right.gif) | ![Up-Down Move](https://github.com/Scalified/fab/blob/master/demo/move_up_down.gif)\n\n### Animations\n\nThe Library has several predefined animations:\n\nFade In - Fade Out | Roll From Down - Roll To Down | Jump From Down - Jump To Down\n:-:|:-:|:-:\n![Fade In Fade Out](https://github.com/Scalified/fab/blob/master/demo/animation_fade_in_fade_out.gif) | ![Roll From Down Roll To Down](https://github.com/Scalified/fab/blob/master/demo/animation_roll_from_down_roll_to_down.gif) | ![Jump From Down - Jump To Down](https://github.com/Scalified/fab/blob/master/demo/animation_jump_from_down_jump_to_down.gif)\n\nScale In - Scale Out | Roll From Right - Roll To Right | Jump From Right - Jump To Right\n:-:|:-:|:-:\n![Scale In Scale Out](https://github.com/Scalified/fab/blob/master/demo/animation_scale_in_scale_out.gif) | ![Roll From Right Roll To Right](https://github.com/Scalified/fab/blob/master/demo/animation_roll_from_right_roll_to_right.gif) | ![Jump From Right Jump To Right](https://github.com/Scalified/fab/blob/master/demo/animation_jump_from_right_jump_to_right.gif)\n\n## Usage\n\n### Creation\n\n#### Declaration inside XML resource\n\n**ActionButton** button can be declared in the XML resource. For instance, using [**RelativeLayout**](http://developer.android.com/reference/android/widget/RelativeLayout.html):\n\n```xml\n\u003cRelativeLayout \n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:fab=\"http://schemas.android.com/apk/res-auto\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        \u003e\n        \u003ccom.scalified.fab.ActionButton \n            android:id=\"@+id/action_button\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentBottom=\"true\" \n            android:layout_alignParentRight=\"true\"\n            android:layout_marginRight=\"@dimen/fab_margin\"\n            android:layout_marginBottom=\"@dimen/fab_margin\"\n            /\u003e\n\u003c/RelativeLayout\u003e\n```\n\n\n```java\n// And then find it within the content view:\nActionButton actionButton = (ActionButton) findViewById(R.id.action_button);\n```\n\n\u003e There are no required configuration parameters for it. All of the configuration parameters are optional.\n\n#### Programmatically\n\n```java\nContext context = getContext();\nActionButton actionButton = new ActionButton(context);\n// And then add it to the content view\n```\n\n### Button actions\n\n#### Showing and Hiding\n\n**Action Button** can be *shown*, *hidden* or completely *dismissed*:\n\n```java\nactionButton.show();    // shows the button if it is hidden and plays the show animation if set\nactionButton.hide();    // hides the button if it is shown and plays the hide animation if set\nactionButton.dismiss(); // completely dismisses the button and plays the hide animation if set\n```\n\n\u003e After dismissal the button is completely removed from its parent view, so any calls to **show()** etc. won't be processed.\n\nThe current status of the button can be checked with the help of:\n\n```java\n// To check whether button is shown (inherited from android.view.View class):\nboolean shown = actionButton.isShown();\n\n// To check whether button is hidden:\nboolean hidden = actionButton.isHidden();\n\n// To check whether button is dismissed:\nboolean dismissed = actionButton.isDismissed();\n```\n\n#### Playing animations\n\nThere are some cases when you need to force playing the animation without calling the **show()**, **hide()** or **dismiss()** methods. \nFor instance, when your button appears within layout in the Activity for the first time. \nIn such cases animations can be played apart from *showing*, *hiding*, or *dismissing* the button:\n\n```java\nactionButton.playShowAnimation();   // plays the show animation\nactionButton.playHideAnimation();   // plays the hide animation\n```\n\n\u003e Animations are played only if set. By default animations are not set.\n\u003e\n\u003e The best way to play the animation with the **Activity** launching is to override the [**onWindowFocusChanged(boolean)**](http://developer.android.com/reference/android/view/Window.Callback.html#onWindowFocusChanged(boolean)) and call either **playShowAnimation()** or **playHideAnimation()** within it\n\n#### Moving ActionButton\n\n**ActionButton** can be moved within its parent container. While moving, translate animation is used.\nThere are methods for moving **ActionButton** in 4 standard directions:\n\n```java\n// Initialize the moving distance\nint distance = 100.0f // in density-independent pixels\n\n// Move ActionButton left\nactionButton.moveLeft(distance);\n\n// Move ActionButton up\nactionButton.moveUp(distance);\n\n// Move ActionButton right\nactionButton.moveRight(distance);\n\n// Move ActionButton down\nactionButton.moveDown(distance);\n```\n\nThe above methods will cover the most cases, however movement can also be customized in more advanced way:\n\n```java\n// Initialize the moving parameters\nint xAxisDelta = 100.0f // in density-independent pixels\nint yAxisDelta = 100.0f // in density-independent pixels\nlong animationDuration = 500L\nInterpolator animationInterpolator = new AccelerateInterpolator();\n\n// Create the moving parameters instance\nMovingParams params = new MovingParams(getContext(), xAxisDelta, yAxisDelta, animationDuration, animationInterpolator);\n\n// Move the ActionButton\nactionButton.move(params);\n```\n\n\u003e [**ViewMover Library**](https://github.com/Scalified/viewmover) is used for performing the **ActionButton** moving.\n\u003e\n\u003e For API lower than **Jelly Bean** *(version code 16)* moving is guaranteed to work as expected with **FrameLayout** and **RelativeLayout**. Working as expected with other layouts **not guaranteed**\n\n### Customization\n\n#### Button types\n\nThere are three types of **Action Button**, which you can work with:\n\n* **DEFAULT** (56dp)\n* **MINI** (40dp)\n* **BIG** (72dp)\n\nBy default the button type is set to **DEFAULT**.\n\nTo work with button types use:\n\n```java\n// To set the button type:\nactionButton.setType(ActionButton.Type.MINI);\n\n// To get the button type:\nActionButton.Type type = actionButton.getType();\n```\n\n#### Button size\n\nTo work with **ActionButton** size use:\n\n```java\n// To get the ActionButton size\nfloat size = actionButton.getSize();\n\n// To set the ActionButton size\nactionButton.setSize(60.0f); // in density-independent pixels\n```\n\n\u003e Changing the default size of the button **breaks the rules** of [**Material Design**](http://www.google.com/design/spec/components/buttons.html)\n\u003e\n\u003e Setting the button size explicitly means, that button types with its default sizes are **completely ignored**. Do not use this method, unless you know what you are doing\n\t\n#### Button states\n\nThere are two button states, which **Action Button** may reside in:\n\n* **NORMAL**\n* **PRESSED**\n\t\nTo work with button states use:\n\n```java\n// To set the button state:\nactionButton.setState(ActionButton.State.PRESSED);\n\n// To get the button state:\nActionButton.State state = actionButton.getState();\n```\n\n#### Button colors\n\nButton colors can be set as for the **NORMAL** state, so for the **PRESSED** one. \nBy default the following colors are set:\n\n* **#FF9B9B9B** for the **NORMAL** state\n* **#FF696969** for the **PRESSED** state\n\nTo work with button colors use:\n\n```java\n// To set button color for normal state:\nactionButton.setButtonColor(getResources().getColor(R.color.fab_material_lime_500));\n\n// To get button color for normal state:\nint buttonColor = actionButton.getButtonColor();\n\n// To set button color for pressed state:\nactionButton.setButtonColorPressed(getResources().getColor(R.color.fab_material_lime_900));\n\n// To get button color for pressed state:\nint buttonColorPressed = actionButton.getButtonColorPressed();\n```\n\n#### Shadow\n\nShadow can be customized in three ways: *color*, *radius* and *offset*.\nBy default shadow **enabled** and has the following default values:\n\t\n* **shadowColor** = **#42000000** (~ light-grey)\n* **shadowRadius** = **8.0f**   (in density-independent pixels)\n* **shadowXOffset** = **0.0f**  (in density-independent pixels)\n* **shadowYOffset** = **8.0f**  (in density-independent pixels)\n\nTo work with shadow use:\n\n```java\n// To check whether shadow is present:\nboolean hasShadow = actionButton.hasShadow();\n\n// To set the shadow color:\nactionButton.setShadowColor(getResources().getColor(R.color.fab_material_grey_500));\n\n// To get the shadow color:\nint shadowColor = actionButton.getShadowColor();\n\n// To set the shadow radius:\nactionButton.setShadowRadius(5.0f);\n\n// To get the shadow radius:\nfloat shadowRadius = actionButton.getShadowRadius();\n\n// To set the shadow X-axis offset:\nactionButton.setShadowXOffset(3.5f);\n\n// To get the shadow X-axis offset:\nfloat shadowXOffset = actionButton.getShadowXOffset();\n\n// To set the shadow Y-axis offset:\nactionButton.setShadowYOffset(3.0f);\n\n// To get the shadow Y-axis offset:\nfloat shadowYOffset = actionButton.getShadowYOffset();\n\n// To remove shadow:\nactionButton.removeShadow();\n```\n\n\u003e Shadow radius and offset must be specified in density-independent pixels.\n\u003e\n\u003e For *API 21 Lollipop* and higher **elevation** can be enabled. In this case the default shadow becomes disabled and configuration of any of its parameters will be ignored.\n\n#### Image\n\n**Action Button** can have an image centered inside. By default the image **absent**. \nAny image can be used for adding. The Library has **fab_plus_icon** drawable, which can also be used. \nWhen an image is set its width and height are changed to the default values, which both are set to\n**24.0dp** (according to material design guidelines). However this size is also adjustable.\n \nTo work with image use:\n\n```java\n// To check whether image is present:\nboolean hasImage = actionButton.hasImage();\n\n// To set an image (either bitmap, drawable or resource id):\nactionButton.setImageBitmap(bitmap);\nactionButton.setImageDrawable(getResource.getDrawable(R.drawable.fab_plus_icon));\nactionButton.setImageResource(R.drawable.fab_plus_icon);\n\n// To get an image:\nDrawable image = actionButton.getImage();\n\n// To set the image size (which is by default 24.0dp):\nactionButton.setImageSize(30.0dp);\n\n// To get the image size:\nfloat imageSize = actionButton.getImageSize();\n\n// To remove the image:\nactionButton.removeImage();\n```\n\n\u003e Image size must be specified in density-independent pixels. \n\u003e\n\u003e Changing the image size **breaks the rules** of [**Material Design**](http://www.google.com/design/spec/components/buttons.html)\n\n#### Stroke\n\nStroke can be customized in two ways: *width* and the *color*. Stroke **disabled** by default, however it has the default values:\n\n* **strokeColor** = **Color.BLACK**\n* **strokeWidth** = **0.0f** (no stroke)\n\nTo work with stroke use:\n\n```java\n// To check whether stroke enabled:\nboolean hasStroke = actionButton.hasStroke();\n\n// To set stroke color:\nactionButton.setStrokeColor(getResources().getColor(R.color.fab_material_blue_grey_500));\n\n// To get stroke color:\nint strokeColor = actionButton.getStrokeColor();\n\n// To set stroke width:\nactionButton.setStrokeWidth(1.5f);\n\n// To get stroke width:\nfloat strokeWidth = actionButton.getStrokeWidth();\n\n// To remove the stroke:\nactionButton.removeStroke();\n```\n\n\u003e Stroke width must be specified in density-independent pixels\n\n#### Effects\n\n##### Shadow Responsive Effect\n\nShadow Responsive Effect means that shadow is changed in response to the user input. When user clicks the button and holds it, shadow radius increased to a certain value. Then, when user releases the button, shadow radius decreased to its initial value.\nShadow Responsive Effect **enabled** by default.\n\nTo work with the Shadow Responsive Effect use:\n\n```java\n// To check whether Shadow Responsive Effect enabled:\nboolean shadowResponsiveEffectEnabled = actionButton.isShadowResponsiveEffectEnabled();\n\n//To enable or disable Shadow Responsive Effect:\nactionButton.setShadowResponsiveEffectEnabled(true);\nactionButton.setShadowResponsiveEffectEnabled(false);\n```\n\n\u003e For *API 21 Lollipop* and higher **elevation** can be enabled. Shadow Responsive Effect won't be available in this case.\n\u003e\n\u003e Shadow maximum radius value is calculated by multiplying the shadow initial radius and shadow response factor, which is by default 1.75f. Shadow response factor can't be changed.\n\u003e\n\u003e Note, that having Shadow Responsive Effect enabled leads to **increasing** of the **ActionButton** general view size. In this case view size calculated based on the maximum value of the shadow radius. This means, that even if there is a place near the **ActionButton** unfilled, it is actually used by Shadow Responsive Effect\n\n##### Ripple Effect\n\nA touch Ripple Effect indicates where and when a touch occurs within the **ActionButton** and acknowledges that the touch input was received.\nRipple Effect **disabled** by default. Ripple Effect color by default is a darken variant (***20%*** darker) of the color for the **PRESSED** state\n\nTo work with Ripple Effect use:\n\n```java\n// To check whether Ripple Effect enabled:\nboolean rippleEffectEnabled = actionButton.isRippleEffectEnabled();\n\n// To enable or disable Ripple Effect:\nactionButton.setRippleEffectEnabled(true);\nactionButton.setRippleEffectEnabled(false);\n\n// To set button color ripple:\nactionButton.setButtonColorRipple(getResources().getColor(R.color.fab_material_grey_900));\n\n// To get button color ripple:\nint buttonColorRipple = actionButton.getButtonColorRipple();\n```\n\n#### Animations\n\n**Action Button** supports 2 animation types: animation, which is played while *showing*\nthe button and animation, which is played while *hiding* the button. By default neither show animation,\nnor hide animation **are set**.\n\nTo work with animations use:\n\n```java\n// To set show animation:\nactionButton.setShowAnimation(getResources().getAnimation(R.anim.fab_fade_in));\nactionButton.setShowAnimation(ActionButton.Animations.FADE_IN);\n\n// To get show animation:\nAnimation animation = actionButton.getShowAnimation();\n\n// To remove show animation:\nactionButton.removeShowAnimation();\n\n// To set hide animation:\nactionButton.setHideAnimation(getResources().getAnimation(R.anim.fab_fade_out));\nactionButton.setHideAnimation(ActionButton.Animations.FADE_OUT);\n\n// To get hide animation:\nAnimation animation = actionButton.getHideAnimation();\n\n// To remove hide animation:\nactionButton.removeHideAnimation();\n```\n\n#### XML full configuration example\n\nFirstly add the namespace:\n```xml\nxmlns:fab=\"http://schemas.android.com/apk/res-auto\"\n```\n\nThen refer the added namespace to configure **Action Button** parameters\n```xml\n\u003ccom.scalified.fab.ActionButton \n            android:id=\"@+id/action_button\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginRight=\"@dimen/fab_margin\"\n            android:layout_marginBottom=\"@dimen/fab_margin\"\n            fab:type=\"DEFAULT\"\n            fab:button_color=\"@color/fab_material_lime_500\"\n            fab:button_colorPressed=\"@color/fab_material_lime_900\"\n            fab:image=\"@drawable/fab_plus_icon\"\n            fab:image_size=\"24dp\"\n            fab:shadow_color=\"#757575\"\n            fab:shadow_radius=\"1.0dp\"\n            fab:shadow_xOffset=\"0.5dp\"\n            fab:shadow_yOffset=\"1.0dp\"\n            fab:stroke_color=\"@color/fab_material_blue_grey_500\"\n            fab:stroke_width=\"1.0dp\"\n            fab:button_colorRipple=\"@color/fab_material_black\"\n            fab:rippleEffect_enabled=\"false\"\n            fab:shadowResponsiveEffect_enabled=\"true\"\n            fab:show_animation=\"@anim/fab_roll_from_down\"\n            fab:hide_animation=\"@anim/fab_roll_to_down\"\n            /\u003e\n```\n\n\u003e The above example contains all of the configuration parameters for **Action Button**, so there is no need to configure all of them, because they all have default values\n\n## Logging\n\nTo enable logging:\n\n1. Add the following dependency:\n\n\t```java\n\tdependencies {\n\t\tcompile 'com.github.tony19:logback-android-classic:1.1.1-3'\n\t}\n\t```\n2. Create the **logback.xml** file in the **src/main/assets** with the sample configuration:\n\n\t```xml\n\t\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\t\u003cconfiguration\u003e\n\t\t\u003cappender name=\"LOGCAT\" class=\"ch.qos.logback.classic.android.LogcatAppender\"\u003e\n\t\t\t\u003ctagEncoder\u003e\n\t\t\t\t\u003cpattern\u003e%logger{0}\u003c/pattern\u003e\n\t\t\t\u003c/tagEncoder\u003e\n\t\t\t\u003cencoder\u003e\n\t\t\t\t\u003cpattern\u003e%d{HH:mm:ss.SSS} [%thread] [%logger{0}] - %msg%n\u003c/pattern\u003e\n\t\t\t\u003c/encoder\u003e\n\t\t\u003c/appender\u003e\n\t\n\t\t\u003croot level=\"TRACE\" additivity=\"false\"\u003e\n\t\t\t\u003cappender-ref ref=\"LOGCAT\" /\u003e\n\t\t\u003c/root\u003e\n\t\u003c/configuration\u003e\n\t```\n\t\u003e You may wish to configure different appenders with different log levels for packages, classes etc.\n\t\n\t\u003e More information about **LOGBack** can be found @ [LOGBack Project Site](http://logback.qos.ch)\n\n3. Add the following **InvalidPackage** ignore rule into **lint.xml** file (located @ the root of the project):\n\n\t```xml\n\t\u003cissue id=\"InvalidPackage\" \u003e\n    \t\u003cignore path=\"**/logback-android-core/*\" /\u003e\n    \u003c/issue\u003e\n\t```\n\t\n## Applications that use ActionButton Library\n\nIf You would like your application to be added to this list please \u003ca href=\"mailto:info@scalified.com?subject=[ActionButton]: Add my application to the list\"\u003ewrite me\u003c/a\u003e or create the pull request\n\nIcon | Application\n:-:|:--|\n\u003cimg src=\"https://lh3.googleusercontent.com/tyDkY3GmUrMX4nIUA5xtlTd3CHpxRLn-VVpRg26ZmqX-RTURwmyXwp36Nl2woPYZilI=w42\" alt=\"Code Buddy Image\"/\u003e | [**CodeBuddy**](https://play.google.com/store/apps/details?id=aniruddha.chetan.codes)\n\u003cimg src=\"https://lh3.ggpht.com/Vn9sIUPcCVihrxMATWR_MjCIFuc5quCw-R3UN8Rmoze7rgaBhHdmF2RqjX3x28EJoQ=w42\" alt=\"Temperature Metric Converter Image\"/\u003e | [**Temperature Metric Converter**](https://play.google.com/store/apps/details?id=com.danielfritzsch.temperatureconverter)\n\n## License\n\n```\n  Copyright 2016 Scalified \u003chttp://www.scalified.com\u003e\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n      http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n```\n\n## Scalified Links\n\n* [Scalified](http://www.scalified.com)\n* [Scalified Official Facebook Page](https://www.facebook.com/scalified)\n* \u003ca href=\"mailto:info@scalified.com?subject=[Tree]: Proposals And Suggestions\"\u003eScalified Support\u003c/a\u003e\n","funding_links":[],"categories":["按钮"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FScalified%2Ffab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FScalified%2Ffab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FScalified%2Ffab/lists"}