Android cambia el color del botón de acción flotante

He intentado durante horas cambiar el color del Botón de acción flotante de Material, pero sin éxito.

 

He intentado agregar

 android:background="@color/mycolor" 

o por código

 FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab); fab.setBackgroundColor(Color.parseColor("#mycolor")); 

o

 fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor"))); 

Pero ninguno de los anteriores funcionó. También probé las soluciones en la “pregunta duplicada” , pero ninguna de ellas funciona, el botón permaneció verde y también se convirtió en un cuadrado.

Me gustaría una respuesta detallada, gracias.

PS: También sería bueno saber cómo agregar un efecto dominó, no podría entender eso tampoco.

Como se describe en la documentación , de forma predeterminada toma el color configurado en el atributo styles.xml colorAccent .

El color de fondo de esta vista se establece de forma predeterminada en el colorAccent de su tema. Si desea cambiar esto en el tiempo de ejecución, puede hacerlo a través de setBackgroundTintList (ColorStateList).

Si deseas cambiar el color

  • en XML con la aplicación de atributos : backgroundTint
  
  • en el código con .setBackgroundTintList (respuesta más abajo por ywwynm )

Como @Dantalian mencionado en los comentarios, si desea cambiar el color del icono, puede usar

 android:tint="@color/white" 

La respuesta de Vijet Badigannavar es correcta, pero el uso de ColorStateList suele ser complicado y no nos dijo cómo hacerlo. Como a menudo nos enfocamos en cambiar el color de View en estado normal y prensado, voy a agregar más detalles:

  1. Si desea cambiar el color de FAB en estado normal, simplemente puede escribir

     mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int)); 
  2. Si desea cambiar el color de FAB en estado comprimido, gracias a Design Support Library 22.2.1 , puede simplemente escribir

     mFab.setRippleColor(your color in int); 

    Al configurar este atributo, cuando presiona largamente el FAB , aparecerá una onda con su color en su punto de contacto y lo revelará en toda la superficie del FAB . Tenga en cuenta que no cambiará el color de FAB en estado normal. Debajo de API 21 (Lollipop), no hay efecto de onda, pero el color de FAB cambiará cuando lo estés presionando.

Finalmente, si desea implementar un efecto más complejo para los estados, entonces debe profundizar en ColorStateList , aquí hay una pregunta de SO que lo discute: ¿Cómo creo ColorStateList programáticamente? .

ACTUALIZACIÓN: Gracias por el comentario de @ Kaitlyn. Para eliminar el trazo de FAB utilizando backgroundTint como su color, puede configurar la app:borderWidth="0dp" en su xml.

Como notó Vasil Valchev en un comentario, es más simple de lo que parece, pero hay una diferencia sutil que no estaba notando en mi XML.

  

Observe que es:

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

y no

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

Si intentas cambiar el color de FAB utilizando la aplicación, hay algún problema. el marco del botón tiene un color diferente, entonces lo que debe hacer:

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

y en el código establece el color:

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

Solo usa,

 app:backgroundTint="@color/colorPrimary" 

no uses,

 android:backgroundTint="@color/colorPrimary" 

El FAB está coloreado en función de su color de colorAccent .

  
 mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor))); 

Otras soluciones pueden funcionar Este es el enfoque del gorila de 10 libras que tiene la ventaja de ser ampliamente aplicable en este y casos similares:

Styles.xml:

  

su diseño xml:

  

El documento sugiere que toma @color / acento por defecto. Pero podemos anularlo en el código mediante el uso de

 fab.setBackgroundTintList(ColorStateList) 

También recuerda,

¡La versión mínima de API para usar esta biblioteca es 15, por lo que debe actualizarla! ¡Si no quieres hacerlo, entonces necesitas definir un dibujable personalizado y decorarlo!

   

Tenga en cuenta que agrega colores en res / values ​​/ color.xml e incluye el atributo en su fab

  app:backgroundTint="@color/addedColor" 

Gracias a autocompletar. Tuve suerte después de algunos golpes y pruebas:

  xmlns:card_view="http://schemas.android.com/apk/res-auto" card_view:backgroundTint="@color/whicheverColorYouLike" 

– o – (ambos son básicamente lo mismo)

  xmlns:app="http://schemas.android.com/apk/res-auto" app:backgroundTint="@color/whicheverColorYouLike" 

Esto funcionó para mí en API versión 17 con la biblioteca de diseño 23.1.0.

Tengo el mismo problema y me está arrebatando el pelo. Gracias por este https://stackoverflow.com/a/35697105/5228412

Lo que podemos hacer..

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

funciona bien para mí y deseo que otros lleguen hasta aquí.

El punto que nos falta es que antes de establecer el color en el botón, es importante trabajar en el valor que desea para este color. Entonces puedes ir a valores> color. Encontrarás los predeterminados, pero también puedes crear colores cubriéndolos y pegándolos, cambiando los colores y nombres. Entonces … cuando vaya a cambiar el color del botón flotante (en activity_main), puede elegir el que ha creado

Ejemplo: código en valores> colores con colores predeterminados + 3 colores más que he creado:

   #3F51B5 #303F9F #FF4081 #f52411 #8e8f93 #494848  

Ahora mi Botón de Acción Flotante con el color que he creado y llamado “corPar”:

  

Funcionó para mí ¡Buena suerte!

lo hice así android: background = “@ color / colorAccent” simplemente voy a la carpeta res y luego hago clic en los valores de la carpeta y luego en colors.xml en colors.xml. Solo cambio el color de colorAccent y lo llamo en android: fondo y está hecho

Cambiar el botón de acción flotante Color de fondo usando la aplicación de la línea inferior: backgroundTint = “@ color / blue”

Cambiar el color del icono del botón de acción flotante android: tint = “@ color / white”

puede usarlo en caso de que quiera cambiar el código floating.setBackgroundTintList (getResources (). getColorStateList (R.color.vermelho));

agregar colores en el archivo color.xml

agregue colores en el archivo color.xml y luego agregue esta línea de código … floatingActionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.fab2_color)));