Reputation: 11444
I have been trying to change Material's Floating Action Button color, but without success.
<android.support.design.widget.FloatingActionButton
android:id="@+id/profile_edit_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="16dp"
android:clickable="true"
android:src="@drawable/ic_mode_edit_white_24dp" />
I have tried to add:
android:background="@color/mycolor"
or via code:
FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));
or
fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));
But none of the above worked. I have also tried the solutions in the proposed duplicate question, but none of them works; the button remained green and also became a square.
P.S. It would be also nice to know how to add ripple effect, couldn't understand that either.
Upvotes: 649
Views: 486251
Reputation: 266
In styles.xml add:
<style name="FloatButtonSytle" parent="Widget.MaterialComponents.FloatingActionButton">
<item name="colorAccent">@color/main_gradient_end</item>
</style>
and in your FloatingActionButton element add:
style="@style/FloatButtonSytle"
like this:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/aparat_button"
style="@style/FloatButtonSytle"
android:layout_width="75dp"
android:layout_height="75dp"
/>
Upvotes: 0
Reputation: 629
You can achieve this in Kotlin by the below code.
binding.fabAddPostMenu.backgroundTintList =
ColorStateList.valueOf(ContextCompat.getColor(this,R.color.complaint_red))
Upvotes: 1
Reputation: 4651
You can use Extended, so set app:iconTint
like this:
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/fAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/d0"
app:iconTint="@color/white"
/>
Upvotes: 1
Reputation: 581
My solution, which worked for me with Data Binding
val color = ContextCompat.getColor(context, R.color.colorPrimary)
binding.fab.backgroundTintList = ColorStateList.valueOf(getColor)
Upvotes: 3
Reputation: 8691
in Kotlin:
val gray = getColor(requireContext(), R.color.green)
binding.fabSubmit.backgroundTintList = ColorStateList.valueOf(gray)
Upvotes: 2
Reputation: 535
for Material design, I just changed the floating action button color like this, Add the below two lines in your Floating action button xml. And done,
android:backgroundTint="@color/colorPrimaryDark"
app:borderWidth="0dp"
Upvotes: 7
Reputation: 61
If you have a Floating Action Button with no drawable you can change the tint programmatically using:
fab.getBackground().mutate().setTint(ContextCompat.getColor(yourContext, R.color.anyColor));
Upvotes: 6
Reputation: 20513
As described in the documentation, by default it takes the color set in styles.xml attribute colorAccent.
The background color of this view defaults to the your theme's colorAccent. If you wish to change this at runtime then you can do so via setBackgroundTintList(ColorStateList).
If you wish to change the color
<android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add"
app:backgroundTint="@color/orange"
app:borderWidth="0dp"
app:elevation="6dp"
app:fabSize="normal" >
As @Dantalian mentioned in the comments, if you wish to change the icon color for Design Support Library up to v22 (inclusive), you can use
android:tint="@color/white"
For Design Support Library since v23 for you can use:
app:tint="@color/white"
Also with androidX
libraries you need to set a 0dp border in your xml layout:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add"
app:backgroundTint="@color/orange"
app:borderWidth="0dp"
app:elevation="6dp"
app:fabSize="normal" />
Upvotes: 1235
Reputation: 364730
With the Material Theme and the material components FloatingActionButton
by default it takes the color set in styles.xml
attribute colorSecondary
.
app:backgroundTint
attribute in xml:<com.google.android.material.floatingactionbutton.FloatingActionButton
...
app:backgroundTint=".."
app:srcCompat="@drawable/ic_plus_24"/>
You can use fab.setBackgroundTintList();
You can customize your style using the <item name="backgroundTint">
attribute
<!--<item name="floatingActionButtonStyle">@style/Widget.MaterialComponents.FloatingActionButton</item> -->
<style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
<item name="backgroundTint">#00f</item>
<!-- color used by the icon -->
<item name="tint">@color/...</item>
</style>
materialThemeOverlay
attribute to override the default colors only for some components: <style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
<item name="materialThemeOverlay">@style/MyFabOverlay</item>
</style>
<style name="MyFabOverlay">
<item name="colorSecondary">@color/custom2</item>
<!-- color used by the icon -->
<item name="colorOnSecondary">@color/...</item>
</style>
Upvotes: 17
Reputation: 533
use
app:backgroundTint="@color/orange" in
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/id_share_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/share"
app:backgroundTint="@color/orange"
app:fabSize="mini"
app:layout_anchorGravity="end|bottom|center" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Upvotes: 0
Reputation: 7
You can use this code in case you want to change the color programmatically
floating.setBackgroundTintList(getResources().getColorStateList(R.color.vermelho));
Upvotes: 0
Reputation: 1593
New theme attribute mapping for Floating Action Button in material 1.1.0
In your app theme:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- ...whatever else you declare in your app theme.. -->
<!-- Set colorSecondary to change background of FAB (backgroundTint) -->
<item name="colorSecondary">@color/colorSecondary</item>
<!-- Customize colorSecondary to change icon/text of FAB (maps to tint and rippleColor) -->
<item name="colorOnSecondary">@android:color/white</item>
</style>
Upvotes: 21
Reputation: 2454
Changing Floating action button background color by using below line
app:backgroundTint="@color/blue"
Changing Floating action button icon color
android:tint="@color/white"
Upvotes: 15
Reputation: 561
When using Data Binding you can do something like this:
android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"
I have made a very simple example
Upvotes: 6
Reputation: 635
add colors in color.xml file and then add this line of code...
floatingActionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.fab2_color)));
Upvotes: 0
Reputation: 41
i did it like this android:background="@color/colorAccent" i just go to folder res then click on folder values and then on colors.xml in colors.xml I just change the color of colorAccent and call it in android:background and its done
Upvotes: 4
Reputation: 3974
As Vasil Valchev noted in a comment it is simpler than it looks, but there is a subtle difference that I wasn't noticing in my XML.
<android.support.design.widget.FloatingActionButton
android:id="@+id/profile_edit_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="16dp"
android:clickable="true"
android:src="@drawable/ic_mode_edit_white_24dp"
app:backgroundTint="@android:color/white"/>
Notice it is:
app:backgroundTint="@android:color/white"
and not
android:backgroundTint="@android:color/white"
Upvotes: 142
Reputation: 281
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));
Upvotes: 28
Reputation: 389
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
app:elevation="6dp"
app:backgroundTint="@color/colorAccent"
app:pressedTranslationZ="12dp"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/add"/>
Note that you add colors in res/values/color.xml and include the attribute in your fab
app:backgroundTint="@color/addedColor"
Upvotes: 9
Reputation: 31
The point we are missing is that before you set the color on the button, it's important to work on the value you want for this color. So you can go to values > color. You will find the default ones, but you can also create colors by copping and pasting them, changing the colors and names. Then... when you go to change the color of the floating button (in activity_main), you can choose the one you have created
Exemple - code on values > colors with default colors + 3 more colors I've created:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="corBotaoFoto">#f52411</color>
<color name="corPar">#8e8f93</color>
<color name="corImpar">#494848</color>
</resources>
Now my Floating Action Button with the color I've created and named "corPar":
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add"
android:tint="#ffffff"
app:backgroundTint="@color/corPar"/>
It worked for me. Good Luck!
Upvotes: 3
Reputation: 193
I got the same problem and its all snatching my hair. Thanks for this https://stackoverflow.com/a/35697105/5228412
What we can do..
favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));
it works fine for me and wish for others who'll reach here.
Upvotes: 9
Reputation: 3144
just use,
app:backgroundTint="@color/colorPrimary"
dont use,
android:backgroundTint="@color/colorPrimary"
Upvotes: 55
Reputation: 7834
Other solutions may work. This is the 10 pound gorilla approach that has the advantage of being broadly applicable in this and similar cases:
Styles.xml:
<style name="AppTheme.FloatingAccentButtonOverlay" >
<item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>
your layout xml:
<android.support.design.widget.FloatingActionButton
android:theme="AppTheme.FloatingAccentButtonOverlay"
...
</android.support.design.widget.FloatingActionButton>
Upvotes: 17
Reputation: 731
Thanks to autocomplete. I got lucky after a few hit and trials:
xmlns:card_view="http://schemas.android.com/apk/res-auto"
card_view:backgroundTint="@color/whicheverColorYouLike"
-- or -- (both are basically the same thing)
xmlns:app="http://schemas.android.com/apk/res-auto"
app:backgroundTint="@color/whicheverColorYouLike"
This worked for me on API Version 17 with design library 23.1.0.
Upvotes: 9
Reputation: 11695
Vijet Badigannavar's answer is correct but using ColorStateList
is usually complicated and he didn't tell us how to do it. Since we often focus on changing View
's color in normal and pressed state, I'm going to add more details:
If you want to change FAB
's color in normal state, you can just write
mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
If you want to change FAB
's color in pressed state, thanks for Design Support Library 22.2.1, you can just write
mFab.setRippleColor(your color in int);
By setting this attribute, when you long-pressed the FAB
, a ripple with your color will appear at your touch point and reveal into whole surface of FAB
. Please notice that it won't change FAB
's color in normal state. Below API 21(Lollipop), there is no ripple effect but FAB
's color will still change when you're pressing it.
Finally, if you want to implement more complex effect for states, then you should dig deeply into ColorStateList
, here is a SO question discussing it: How do I create ColorStateList programmatically?.
UPDATE:
Thanks for @Kaitlyn's comment. To remove stroke of FAB using backgroundTint as its color, you can set app:borderWidth="0dp"
in your xml.
Upvotes: 263
Reputation: 1122
if you try to change color of FAB by using app, there some problem. frame of button have different color, so what you must to do:
app:backgroundTint="@android:color/transparent"
and in code set the color:
actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));
Upvotes: 63
Reputation: 552
The document suggests that it takes the @color/accent by default. But we can override it on code by using
fab.setBackgroundTintList(ColorStateList)
Also remember,
The minimum API version to use this library is 15 so you need to update it! if you dont want to do it then you need to define a custom drawable and decorate it!
Upvotes: 14
Reputation: 20211
The FAB is colored based on your colorAccent
.
<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
<item name="colorAccent">@color/accent</item>
</style>
Upvotes: 35