2015-06-29 23 views
34

current fab
corrente FABSet FAB icona di colore

Vorrei sapere come cambiare il colore icona della (Floating Tasto Azione) widget di FAB fornito dal 'com.android.support:design: 22.2.0 'libreria da verde a bianco.

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" /> 

risposta

14

È possibile modificare a livello di codice utilizzando 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

Funziona quando l'impostazione 'PorterDuff.Mode.SRC_ATOP' e utilizzando' Drawable myFabSrc = ResourcesCompat.getDrawable (getResources() , android.R.drawable.ic_input_add, getTheme()); ' – Paradiesstaub

+23

La tua soluzione è troppo complicata. Basta usare android: tint = "@ android: color/white" –

+1

Non è complicato @MahdiElMasaoudi. A volte e la maggior parte delle volte ci sono casi d'uso in cui deve essere aggiornato in modo programmatico! Spetta all'utente ridurre i costi generali il più possibile. – sud007

126

con Android: proprietà tinta è possibile impostare il colore come questo

<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" 
    /> 
+0

La migliore soluzione ... – JMR

+1

Questo mi ha aiutato molto, molto più semplice rispetto a farlo a livello di programmazione. –

+0

Per caso ho visto la tua foto qui. Buona soluzione Saleem. :-) –

4

Utilizzare la versione bianca del ic_add dal sito di progettazione di Google.

android:tint sembra una soluzione pulita, ma non è supportato sotto il livello di API 21

Utilizzando una bitmap aggiunge una minore complessità per la vostra applicazione che tentare di cambiare il colore di un'icona esistente a livello di codice. Meno complessità significa meno cose da testare :)

+3

Mi sembra come se ' android: tint' funziona per 'android.support.design.widget.FloatingActionButton' definito nella libreria di supporto anche su dispositivi con livello API inferiore, l'ho appena testato su un'immagine JellyBean (API 16). – arekolek

2

È più facile che ottenere i drawable, è sufficiente accedere al filtro del colore e impostarlo sul colore che si desidera.

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

myFab.setColorFilter(Color.WHITE); 
+0

Non funziona –

+0

Non so perché sia ​​stato rifiutato, questa è la soluzione corretta e avrebbe dovuto essere la risposta accettata. – Ishaan

+0

Funziona! Questa risposta merita più voti! –

0

Dal FloatingActionButton estende ImageView possiamo usare ImageViewCompat per colorare l'icona:

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