Установить цвет значка FAB

текущая фабрика
текущая FAB

Я хотел бы знать, как изменить цвет значка виджета FAB (Floating Action Button), предоставляемого библиотекой com.android.support:design:22.2.0, с зеленого на белый.

style.xml

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/color_primary</item>
    <item name="colorPrimaryDark">@color/color_primary_dark</item>
    <item name="colorAccent">@color/accent</item>

</style>
<color name="color_primary">#00B33C</color>
<color name="color_primary_dark">#006622</color>
<color name="accent">#FFB366</color>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <include android:id="@+id/toolbar" layout="@layout/toolbar" />

    <TextView android:id="@+id/text"
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:paddingTop="16dp"
        android:textSize="20sp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:paddingTop="8dp"
        android:paddingBottom="16dp" />

</LinearLayout>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:src="@android:drawable/ic_input_add"
    android:layout_margin="24dp"
    app:elevation="6dp"
    app:pressedTranslationZ="12dp"
    app:borderWidth="0dp" />


person Paradiesstaub    schedule 29.06.2015    source источник


Ответы (15)


ОБНОВЛЕНИЕ 2

Если вы используете com.google.android.material.floatingactionbutton.FloatingActionButton, используйте app:tint:

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

ОБНОВЛЕНИЕ

Обратитесь к ответу @Saleem Khan, который является стандартным способом установить оттенок, используя:

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

через XML на FAB.

СТАРЫЙ (июнь 2015 г.)

Этот ответ был написан до октября 2015 года, когда android:tint на FAB поддерживался только с API ›= 21.

Вы можете изменить его программно с помощью ColorFilter.

//get the drawable
Drawable myFabSrc = getResources().getDrawable(android.R.drawable.ic_input_add);
//copy it in a new one
Drawable willBeWhite = myFabSrc.getConstantState().newDrawable();
//set the color filter, you can use also Mode.SRC_ATOP
willBeWhite.mutate().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
//set it to your fab button initialized before
myFabName.setImageDrawable(willBeWhite);
person Giorgio Antonioli    schedule 29.06.2015
comment
Работает при установке PorterDuff.Mode.SRC_ATOP и использовании Drawable myFabSrc = ResourcesCompat.getDrawable(getResources(), android.R.drawable.ic_input_add, getTheme()); - person Paradiesstaub; 29.06.2015
comment
Ваше решение слишком сложное. Просто используйте android: tint = @ android: color / white - person Mehdi; 24.03.2016
comment
Это не сложно @MahdiElMasaoudi. Иногда и в большинстве случаев есть случаи, когда его нужно обновлять программно! Пользователь должен максимально сократить накладные расходы. - person sud007; 01.09.2017
comment
Если вы используете FloatingActionButton из пакета com.google.android.material, вы должны добавить app:tint вместо android:tint. - person Chenhe; 22.04.2020
comment
используйте 1_ - person Erkan; 02.12.2020
comment
Я обновляю ответ этой информацией. - person Giorgio Antonioli; 02.12.2020

Используя свойство android: tint, вы можете установить такой цвет

<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:tint="@android:color/white"
    android:src="@android:drawable/ic_input_add"
   />
person Saleem Khan    schedule 03.12.2015
comment
Это мне очень помогло, намного проще, чем делать это программно. - person Angel Joseph Piscola; 17.03.2016
comment
Случайно увидел здесь ваше фото. Хорошее решение Салим. :-) - person Anees U; 10.07.2016
comment
такое чистое решение - person Thiago Pereira; 18.08.2016
comment
android:tint поддерживается только на уровне API 21 и выше :( developer.android.com/ обучение / материал / drawables.html - person alexbirkett; 31.08.2016
comment
@alexbirkett, за исключением того, что FloatingActionButton является частью библиотеки поддержки здесь и, похоже, также реализует его на более старых API (пробовал с API 16). - person arekolek; 03.02.2017

Если вы используете Material Components

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="16dp"
    android:layout_gravity="bottom|end"
    app:fabSize="normal"
    app:tint="@color/colorAccent"
    app:srcCompat="@drawable/ic_google"/>

Если вы хотите использовать цвет значка по умолчанию, измените app:tint="@null"

person Miravzal    schedule 01.05.2019
comment
Используется app:backgroundTint="" для цвета фона и app:tint="" для оттенка изображения. - person Ray Hunter; 18.06.2019
comment
Я искал около 30 минут, пока не понял, что это не должно быть android:tint, а скорее app:tint. - person Panos Gr; 04.07.2019
comment
'app: tint = @ null' спаси меня :) - person Sayed Abolfazl Fatemi; 04.02.2021
comment
Отлично, спасибо! - person DIRTY DAVE; 10.04.2021

Вы должны изменить app:tint, чтобы это работало. android:tint не сделал для меня никаких изменений.

person B. Amine    schedule 15.07.2020

Это проще, чем получить чертежи, вам нужно только получить доступ к цветному фильтру и установить для него нужный цвет.

FloatingActionButton myFab = (FloatingActionButton) findViewById(R.id.myfabid);

myFab.setColorFilter(Color.WHITE);
person Daniel Campos    schedule 16.11.2017
comment
Я не знаю, почему он был отклонен, это правильное решение, и ответ должен был быть принятым. - person Ishaan; 23.12.2017
comment
Используйте это во фрагменте yourFab.setColorFilter(getResources().getColor(R.color.red)); - person OhhhThatVarun; 24.02.2019
comment
как установить цвет FAB в xml или стиле? - person roghayeh hosseini; 07.11.2019
comment
@roghayehhosseini android:tint для API 21 и выше. Это также работает, если вы используете библиотеку поддержки android.support.design.widget.FloatingActionButton - person Daniel Campos; 08.11.2019
comment
Используйте app: tint для поддержки API ниже 21 - person GilbertS; 16.06.2020
comment
Ни app: tint, ни android: tint у меня не работали, но это сработало. ГОЛОСОВАНИЕ ЗА! - person Sam; 21.01.2021

Поскольку FloatingActionButton расширяет ImageView, мы можем использовать ImageViewCompat для тонирования значка:

ImageViewCompat.setImageTintList(
    floatingActionButton,
    ColorStateList.valueOf(Color.WHITE)
);
person sfera    schedule 03.01.2018
comment
Это работает, и это один из лучших способов сделать это с помощью кода, если вы хотите переключить цвет значка! Спасибо! - person Jérémy; 05.03.2019
comment
Я пробовал использовать setImageResource с тем же рисунком другого цвета, но не работал. Это был лучший способ для меня - person SagaRock101; 16.01.2021
comment
Это сработало и для меня. Мне пришлось изменить значок fab и его цвет при щелчке по нему. - person Kalaiselvan; 30.06.2021

Используйте белую версию ic_add с сайта дизайна Google.

android:tint выглядит чистым решением, но не поддерживается ниже уровня API 21

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

person alexbirkett    schedule 31.08.2016
comment
Мне кажется, что android:tint работает для android.support.design.widget.FloatingActionButton, определенного в библиотеке поддержки, даже на устройствах более низкого уровня API, я только что протестировал его на образе JellyBean (API 16). - person arekolek; 03.02.2017

Если вы используете материал FAB, используйте app: tint для изменения цвета значка вместо android: tint.

person Innocent_Kyalo    schedule 02.12.2020

Если вы хотите изменить цвет значка в CollapsingToolbarLayout, используйте следующий код

app:tint="@color/white"

Используйте приложение вместо Android

person Mohammad No3ratii    schedule 13.01.2021

Попробуйте этот код

    <com.google.android.material.floatingactionbutton.FloatingActionButton
       android:id="@+id/fab"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="bottom|end"
       android:backgroundTint="@color/sm_blue"
       app:tint="@color/white"
       android:layout_margin="@dimen/fab_margin"
       app:srcCompat="@android:drawable/ic_input_add" />

Результат  введите описание изображения здесь

person Zeeshan Ali    schedule 18.05.2021

Если вы используете материал FAB, вы можете стилизовать его программно, используя приведенный ниже код в Kotlin.

fab.supportImageTintList = ContextCompat.getColorStateList(context, R.color.fab_icon_tint)
person Emi Raz    schedule 29.06.2020

 <com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/add_loan"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/medium"
    android:layout_marginBottom="16dp"
    android:backgroundTint="@color/ci_blue"
    android:theme="@style/fabtheme"
    app:srcCompat="@drawable/ic_baseline_add_24"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="1"
    app:layout_constraintStart_toStartOf="parent"
    app:rippleColor="@color/white" />

тема

<style name="fabtheme" parent="Widget.Design.FloatingActionButton">
    <item name="colorOnSecondary">@color/white</item>
</style>

or

использовать атрибут

приложение: оттенок = @ цвет / белый

person ebs237    schedule 02.02.2021

Вы можете сделать свой собственный стиль:

<style name="FloatingButton" parent="Widget.MaterialComponents.FloatingActionButton">
        <item name="colorSecondary">@color/red</item>
        <item name="colorOnSecondary">@color/white</item>
</style>

Где colorSecondary - это фон, а colorOnSecondary - это цвет кнопки, которую можно рисовать.

<com.google.android.material.floatingactionbutton.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_phone"
            android:theme="@style/FloatingButton" />
person M.SH    schedule 04.03.2021

Если вы используете com.google.android.material.floatingactionbutton.FloatingActionButton

потом

  1. Чтобы изменить цвет фона плавающей кнопки действия, используйте app:backgroundTint

  2. Чтобы изменить цвет значка плавающей кнопки действия, используйте app:tint

  3. Чтобы изменить Рисование значка кнопки с плавающим действием, используйте app:srcCompat

     <com.google.android.material.floatingactionbutton.FloatingActionButton
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     app:backgroundTint="@color/white"
     app:srcCompat="@drawable/fb_icon"
     app:tint="@android:color/black" />
    
person Kishan Solanki    schedule 27.04.2021

Мое решение для программного изменения цвета значка FAB: это решение работает для уровня API 21 выше

val fab = FloatingActionButton(requireContext())
 fab.apply {
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        imageTintList = ColorStateList.valueOf(Color.WHITE)
 }
person Nanda Z    schedule 02.06.2021