it-swarm.com.ru

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")));

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

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

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

458
Jjang

Как описано в документация , по умолчанию он принимает цвет, заданный в атрибуте styles.xml 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"     
922
Marko

Ответ Виджета Бадиганнавара правильный, но использование 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 будет меняться, когда вы его нажимаете.

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

ОБНОВЛЕНИЕ: Спасибо за комментарий @ Кейтлин. Чтобы удалить обводку FAB с использованием backgroundTint в качестве цвета, вы можете установить app:borderWidth="0dp" в своем xml.

219
ywwynm

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

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

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

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

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

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

app:backgroundTint="@color/colorPrimary"

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

Android:backgroundTint="@color/colorPrimary"
44
Ashana.Jackol

Цвет FAB зависит от вашего colorAccent.

<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>
27
tachyonflux
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));
20
Reza Isfandyari

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

Styles.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>
12
Robin Davies

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

fab.setBackgroundTintList(ColorStateList)

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

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

10
Vijet Badigannavar
 <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 и включаете атрибут в свой список.

   app:backgroundTint="@color/addedColor"
6
Gavine Joyce

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

    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.

6
Gaurav Kumar Gupta

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

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

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

это прекрасно работает для меня и желаю другим, кто доберется сюда.

5
Purvik Rana

Изменение цвета фона кнопки "Плавающая" с помощью строки ниже

app:backgroundTint="@color/blue"

Изменение цвета значка кнопки "Плавающее действие"

Android:tint="@color/white"     
4
Kishore Reddy

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

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

Я сделал очень просто пример

3
Jan Málek

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

2
sana sajjad

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

Пример - код на значения> цвета с цветами по умолчанию + еще 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"/>

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

1
Nidia F.

Новое отображение атрибута темы для кнопка с плавающим действием в материале 1.1.0

В теме вашего приложения:

  • Установите colorSecondary, чтобы установить цвет для фона FAB (сопоставляется с backgroundTint)
  • Установите colorOnSecondary, чтобы установить цвет значка/текста и цвет пульсации FAB (сопоставляется с tint и rippleColor)

<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>
1
luca992

add colors in color.xml file

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

0
Progga Ilma

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

0
DiegoS