java - studio - Android cambia el color del botón de acción flotante
gama de colores en android (19)
He intentado durante horas cambiar el color del botón de acción flotante del material, pero sin éxito.
<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" />
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.
PD: También sería bueno saber cómo agregar el efecto dominó, tampoco podría entender eso.
Al usar Enlace de datos , puede hacer algo como esto:
android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"
He hecho un example muy simple
Cambiar el color de fondo del botón de acción flotante utilizando la línea de abajo
app:backgroundTint="@color/blue"
Cambio del color del icono del botón de acción flotante
android:tint="@color/white"
Como se describe en la documentation , por defecto toma el color establecido en el atributo styles.xml colorAccent .
El color de fondo de esta vista por defecto es el colorAccent de su tema. Si desea cambiar esto en 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
<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" >
- en código con .setBackgroundTintList (respuesta a continuación por ywwynm )
Como @Dantalian mencionó en los comentarios, si desea cambiar el color del icono, puede usar
android:tint="@color/white"
Como señaló Vasil Valchev en un comentario, es más simple de lo que parece, pero hay una sutil diferencia que no noté en mi 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"/>
Note que es:
app:backgroundTint="@android:color/white"
y no
android:backgroundTint="@android:color/white"
El FAB está coloreado en función de su
colorAccent
.
<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
<item name="colorAccent">@color/accent</item>
</style>
El documento sugiere que toma el @ color / acento por defecto. Pero podemos anularlo en el código usando
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, ¡debes definir un dibujo personalizado y decorarlo!
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á los predeterminados, pero también puede crear colores copiándolos y pegándolos, cambiando los colores y los 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:
<?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>
Ahora mi botón de acción flotante con el color que he creado y llamado "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"/>
A mi me funciono. ¡Buena suerte!
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.
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 presionado, voy a agregar más detalles:
-
Si desea cambiar el color de
FAB
en estado normal, simplemente puede escribirmFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
-
Si desea cambiar el color de
FAB
en estado presionado, gracias por Design Support Library 22.2.1 , puede escribirmFab.setRippleColor(your color in int);
Al establecer este atributo, cuando mantienes presionada la tecla
FAB
, aparecerá una onda con tu color en tu punto de contacto y se mostrará en toda la superficie de laFAB
. Tenga en cuenta que no cambiará el color deFAB
en estado normal. Debajo de API 21 (Lollipop), no hay efecto dominó, pero el color deFAB
seguirá cambiando cuando lo presione.
Finalmente, si desea implementar un efecto más complejo para los estados, entonces debe profundizar en
ColorStateList
, aquí hay una pregunta SO que lo discute:
¿Cómo creo ColorStateList mediante programación?
.
ACTUALIZACIÓN:
Gracias por el comentario de @ Kaitlyn.
Para eliminar el trazo de FAB usando backgroundTint como su color, puede configurar la
app:borderWidth="0dp"
en su xml.
Nuevo mapeo de atributos del tema para el botón de acción flotante en el material 1.1.0
En el tema de tu aplicación:
- Establezca colorSecondary para establecer un color para el fondo de FAB (se asigna a backgroundTint)
- Establezca colorOnSecondary para establecer un color para el icono / texto y el color ondulado de FAB (se asigna a tint y rippleColor)
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- ...whatever else you declare in your app theme.. -->
<!-- Set colorSecondary to change background of FAB (backgroundTint) -->
<item name="colorSecondary">@color/colorSecondary</item>
<!-- Customize colorSecondary to change icon/text of FAB (maps to tint and rippleColor) -->
<item name="colorOnSecondary">@android:color/white</item>
</style>
Otras soluciones pueden funcionar. Este es el enfoque del gorila de 10 libras que tiene la ventaja de ser ampliamente aplicable en este y otros casos similares:
Styles.xml:
<style name="AppTheme.FloatingAccentButtonOverlay" >
<item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>
su diseño xml:
<android.support.design.widget.FloatingActionButton
android:theme="AppTheme.FloatingAccentButtonOverlay"
...
</android.support.design.widget.FloatingActionButton>
Puede usar este código en caso de que quiera cambiar el color mediante programación
floating.setBackgroundTintList(getResources().getColorStateList(R.color.vermelho));
Si intenta cambiar el color de FAB mediante la aplicación, hay algún problema. El marco del botón tiene un color diferente, así que lo que debe hacer:
app:backgroundTint="@android:color/transparent"
y en código establece el color:
actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));
Solo usa,
app:backgroundTint="@color/colorPrimary"
no use
android:backgroundTint="@color/colorPrimary"
Tengo el mismo problema y todo me está arrebatando el pelo. Gracias por esto https://.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í.
lo hice así android: background = "@ color / colorAccent" solo voy a la carpeta res y luego hago clic en los valores de la carpeta y luego en colors.xml en colors.xml Simplemente cambio el color de colorAccent y lo llamo en android: background y esta hecho
<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"/>
Tenga en cuenta que agrega colores en res / values / color.xml e incluye el atributo en su fab
app:backgroundTint="@color/addedColor"
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));