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 380

18 ответов:

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

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

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

  • в XML с атрибутом приложение: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'S цвет в нормальном и нажатом состоянии, я собираюсь добавить более подробную информацию:

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

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

    mFab.setRippleColor(your color in int);
    

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

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

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

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

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

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

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

add colors in color.xml file

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