Встановити колір значка FAB


83

поточний фаб
поточний FAB

Я хотів би знати, як змінити колір значка віджета FAB (плаваюча кнопка дії), що надається бібліотекою '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" />

Відповіді:


55

ОНОВЛЕННЯ 2

Якщо ви використовуєте com.google.android.material.floatingactionbutton.FloatingActionButton, використовуйте app:tintзамість android:tint.

ОНОВЛЕННЯ

Зверніться до відповіді @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);

3
Це працює при встановленні PorterDuff.Mode.SRC_ATOPта використанніDrawable myFabSrc = ResourcesCompat.getDrawable(getResources(), android.R.drawable.ic_input_add, getTheme());
Paradiesstaub

48
Ваше рішення занадто складне. Просто використовуйте android: tint = "@ android: color / white"
Мехді

4
Це не складно @MahdiElMasaoudi. Іноді і в більшості випадків трапляються випадки використання, коли його потрібно програмно оновлювати! Користувач повинен максимально зменшити накладні витрати.
sud007

22
Якщо ви використовуєте FloatingActionButtonце в com.google.android.materialпакеті, вам слід додати app:tintзамість android:tint.
Ченьхе

використанняapp:tint="@android:color/white"
Еркан

193

За допомогою властивості 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"
   />

1
Це допомогло мені набагато, набагато простіше, ніж робити це програмно.
Angel Joseph Piscola

Випадково побачив тут твій знімок. Хороше рішення Saleem. :-)
Anees U

таке чисте рішення
Тьяго Перейра

9
android:tintсхоже, підтримується лише в API рівня 21 і вище :( developer.android.com/training/material/drawables.html
alexbirkett

1
@alexbirkett, крім FloatingActionButton, є частиною бібліотеки підтримки тут, і, схоже, реалізує його і на старих API (спробував за допомогою API 16).
arekolek

108

Якщо ви використовуєте 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"


14
Використовується app:backgroundTint=""для кольорів тла та app:tint=""відтінку зображення.
Рей Хантер,

22
Я дивився близько 30 хвилин, поки не зрозумів, що це не повинно бути, android:tintале швидше app:tint.
Panos Gr

18

Це простіше, ніж отримати графічні матеріали, вам потрібно лише отримати доступ до кольорового фільтра та встановити його для потрібного кольору.

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

myFab.setColorFilter(Color.WHITE);

1
Я не знаю, чому за нього було проголосовано, це правильне рішення і повинно було бути прийнятою відповіддю.
Ішаан,

1
Використовуйте це у фрагментіyourFab.setColorFilter(getResources().getColor(R.color.red));
OhhhThatVarun

як встановити колір FAB в xml або стилі?
roghayeh hosseini

@roghayehhosseini android:tintдля API 21 і вище. Це також працює, якщо ви користуєтесь бібліотекою підтримкиandroid.support.design.widget.FloatingActionButton
Даніель Кампос

Використовуйте додаток: відтінок для підтримки API нижче 21
GilbertS

17

Вам потрібно змінитись app:tint, щоб це працювало. android:tintне зробив ніяких змін для мене.


7

Використовуйте білу версію ic_add із веб-сайту дизайну Google.

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

Використання растрового зображення додає вашій програмі меншої складності, ніж спроба програмно змінити колір існуючої піктограми. Менша складність означає менше речей для перевірки :)


3
Мені здається, ніби це android:tintпрацює для android.support.design.widget.FloatingActionButtonвизначеного в бібліотеці підтримки навіть на пристроях нижчого рівня API, я щойно перевірив це на зображенні JellyBean (API 16).
arekolek

7

Оскільки FloatingActionButtonextends ImageViewми можемо використовувати ImageViewCompatдля тонування піктограми:

ImageViewCompat.setImageTintList(
    floatingActionButton,
    ColorStateList.valueOf(Color.WHITE)
);

Це працює, і один з найкращих способів зробити це за допомогою коду, якщо ви хочете змінити колір піктограми! Дякую!
Джеремі

2

Якщо ви використовуєте матеріал FAB, використовуйте додаток: відтінок, щоб змінити колір піктограми замість андроїд: відтінок


0

Якщо ви використовуєте матеріал FAB, ви можете програмувати його стилістично, використовуючи наведений нижче код у Kotlin.

fab.supportImageTintList = ContextCompat.getColorStateList(context, R.color.fab_icon_tint)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.