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 с атрибутом приложение: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 цвет в нормальном и нажатом состоянии, я собираюсь добавить более подробную информацию:
если вы хотите изменить
FAB
'S цвет в нормальном состоянии, можно просто писатьmFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
если вы хотите изменить
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"