Android изменение цвета кнопки плавающего действия

часами пытался изменить цвет кнопки плавающего действия материала, но безуспешно.

<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" />

Я пытался добавить

android:background="@color/mycolor"

или через код

FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));

или

fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));

но ничего из вышеперечисленного не сработало. Я также пробовал решения в "дублировать вопрос", но ни один из них не работает, кнопка осталась зеленой и также стала квадратной.

Я хотел бы получить подробный ответ, спасибо.

П. С. было бы неплохо также знать, как добавить эффект пульсации, не могла понять что либо.

18 ответов


как описано в документация по умолчанию он принимает цвет в стили.в XML атрибут colorAccent.

цвет фона этого представления по умолчанию соответствует colorAccent вашей темы. Если вы хотите изменить это во время выполнения, вы можете сделать это через setBackgroundTintList(ColorStateList).

Если вы хотите изменить цвет

  • в XML с атрибутом app:backgroundTint
<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" >
  • в коде .setBackgroundTintList (ответ ниже ywwynm)

Как @Dantalian писал в комментариях, если вы хотите изменить цвет, вы можете использовать

android:tint="@color/white"     

Vijet Badigannavar ответ правильный, но с помощью ColorStateList обычно сложнее и он не сказал нам, как это делать. Так как мы часто фокусируемся на изменении Viewцвет в нормальном и нажатом состоянии, я собираюсь добавить более подробную информацию:

  1. если вы хотите изменить FABцвет в нормальном состоянии, вы можете просто написать

    mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
    
  2. если вы хотите изменить FABцвет в отжатом положении, спасибо для библиотеки поддержки дизайна 22.2.1, вы можете просто написать

    mFab.setRippleColor(your color in int);
    

    установив этот атрибут, при длительном нажатии кнопки FAB, рябь с вашим цветом появится в вашей точке касания и раскроется на всю поверхность FAB. Пожалуйста, обратите внимание, что это не изменит FABцвет в нормальном состоянии. Ниже API 21 (Lollipop) нет эффекта пульсации, но FAB'S цвет будет по-прежнему меняться, когда вы нажимаете его.

наконец, если вы хотите реализовать более сложный эффект для состояний, то вы должны глубоко копать в ColorStateList, вот так вопрос обсуждаем: как создать ColorStateList программно?.

обновление: Спасибо за комментарий @Kaitlyn. Чтобы удалить ход FAB, используя backgroundTint в качестве цвета, вы можете установить app:borderWidth="0dp" в вашем xml.


As Василь Валча отметил в комментарии это проще, чем кажется, но есть тонкая разница, которую я не замечал в своем 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"/>

обратите внимание, что это:

app:backgroundTint="@android:color/white"

и не

android:backgroundTint="@android:color/white"

Если вы пытаетесь изменить цвет FAB с помощью приложения, есть некоторые проблемы. рамка кнопки имеет разный цвет, так что вы должны сделать:

app:backgroundTint="@android:color/transparent"

и в коде установите цвет:

actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));

просто используйте

app:backgroundTint="@color/colorPrimary"

Не используйте,

android:backgroundTint="@color/colorPrimary"

FAB окрашен на основе вашего colorAccent.

<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>

mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));

другие решения могут работать. Это 10-фунтовый подход гориллы, который имеет то преимущество, что широко применим в этом и подобных случаях:

стили.XML-код:

<style name="AppTheme.FloatingAccentButtonOverlay" >
    <item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>

ваш макет xml:

<android.support.design.widget.FloatingActionButton
       android:theme="AppTheme.FloatingAccentButtonOverlay"
       ...
 </android.support.design.widget.FloatingActionButton>

документ предполагает, что по умолчанию он принимает @color/accent. Но мы можем переопределить его в коде, используя

fab.setBackgroundTintList(ColorStateList)

также помните,

минимальная версия API для использования этой библиотеки-15, поэтому вам нужно ее обновить! если вы не хотите этого делать, вам нужно определить пользовательский drawable и украсить его!


благодаря функции автозаполнения. Мне повезло после нескольких попаданий и испытаний:

    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    card_view:backgroundTint="@color/whicheverColorYouLike"

-- или -- (оба в основном одно и то же)

    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:backgroundTint="@color/whicheverColorYouLike"

это сработало для меня на API версии 17 с библиотекой дизайна 23.1.0.


 <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"/>

обратите внимание, что вы добавляете цвета в res / values / color.XML и включите атрибут в свой fab

   app:backgroundTint="@color/addedColor"

У меня такая же проблема и все ее вырывание мои волосы. Спасибо за это https://stackoverflow.com/a/35697105/5228412

что мы можем сделать..

 favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));

он отлично работает для меня и желает для других, кто достигнет здесь.


точка, которой нам не хватает, заключается в том, что перед установкой цвета на кнопке важно работать над значением, которое вы хотите для этого цвета. Таким образом, вы можете перейти к значениям > цвет. Вы найдете те, что по умолчанию, но вы также можете создавать цвета, копируя и вставляя их, изменяя цвета и имена. Затем... когда вы идете, чтобы изменить цвет кнопки плавающие (в activity_main), вы можете выбрать тот, который вы создали

Exemple-код на значениях > цвета с цветами по умолчанию + Еще 3 цвета, которые я создал:

<?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>

теперь моя плавающая кнопка действия с цветом, который я создал и назвал "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"/>

это сработало для меня. Удачи!


Я сделал это, как это android: background= " @color/colorAccent" я просто иду в папку res, затем нажимаю на значения папок, а затем на цвета.XML в цветах.xml я просто меняю цвет colorAccent и называю его в android: background и его done


при использовании Привязка Данных вы можете сделать что-то вроде этого:

android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"

изменение цвета фона кнопки плавающего действия с помощью строки ниже app:backgroundTint= "@цвет / синий"

изменение цвета значка кнопки плавающего действия android: tint= "@color / white"


вы можете использовать его в случае, если вы хотите изменить код плавающий.setBackgroundTintList (getResources ().getColorStateList (R. color.vermelho));


add colors in color.xml file

добавить цвета в цвет.xml-файл, а затем добавьте эту строку кода... floatingActionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.fab2_color)));