He visto algunas preguntas SO y me dieron algunos métodos posibles para lograr lo que quiero. Por ejemplo:
Utilice el
colorControlHighlight
atributo en styles.xml.Aquí está mi styles-v21.xml:
<style name="SelectableItemBackground"> <item name="android:colorControlHighlight">#5677FC</item> <item name="android:background">?attr/selectableItemBackground</item> </style>
Y mi widget:
<TextView android:id="@+id/tv_take_photo_as_bt" android:layout_width="280dp" android:layout_height="48dp" android:text="@string/act_take_photo" style="@style/SelectableItemBackground"/>
Y no funciona. También intenté agregar
parent="Theme.AppCompat
al estilo "SelectableItemBackground", o cambiar acolorControlHighlight(no android: prefix)"
, o cambiar a?android:attr/selectableItemBackground
, ninguno es útil.Utilice
backgroundTint
atributo en el diseño.Así que agrego
android:backgroundTint="#5677FC"
a miTextView
. Todavía inútil. Luego traté de cambiarandroid:backgroundTintMode
asrc_in
ysrc_atop
, y nunca hicieron la diferencia.
Entonces, ¿cómo puedo cambiar el color de la ondulación cuando lo uso ?attr/selectableItemBackground
como fondo? Solo me concentro en Lollipop y más. ¡Gracias de antemano!
colorControlHighlight
lugar deandroid:colorControlHighlight
funciona mejor para mí, de lo contrario, es solo para v21 +clickable="true"
y el efectoEfecto dominó en dispositivos pre y Lollipop +
Harrane y Liuting tienen razón. La respuesta aceptada no es la mejor forma. Permítame mostrarle en el código cómo cambiar el color de la ondulación para las versiones anteriores a Lollipop y superiores
Su AppTheme debe heredar de cualquier tema de AppCompat y contener el atributo colorControlHighlight (sin el prefijo 'android:')
Su vista debe contener clickable = "true" (o debe tener un detector de clics configurado de manera programática) y el fondo debe ser "? Attr / selectableItemBackgroundBorderless" o "? Attr / selectableItemBackground":
Nota: si su vista principal tiene un fondo blanco, no verá el efecto dominó ya que es blanco. Cambiar el valor de colorControlHighlight para un color diferente
Además, si desea diferentes colores de ondulación en diferentes actividades, puede establecer un tema personal para cada actividad en el archivo de manifiesto, por ejemplo:
¿Diferentes colores de ondulación para diferentes fragmentos en la misma actividad?
Puede cambiar los atributos del tema de actividad para cada fragmento en tiempo de ejecución. Simplemente sobrescríbalos antes de que el fragmento se infle con su estilo personalizado y aplíquelo a un tema actual:
en valores / estilos.xml
Luego, en su fragmento antes de la inflación en
onCreateView()
:Este estilo funcionará solo para este fragmento
¿Diferentes colores de ondulación para diferentes vistas? (Piruleta +)
Puede cambiar el color de la ondulación para cada vista por separado usando el
colorControlHighlight
atributo, no funciona si los aplica a una vista directamente:deberías aplicarlo como tema:
PD: Además, a veces este enfoque ayuda si tiene problemas desconocidos con la ondulación y no puede resolverlos. En mi caso, utilicé una biblioteca deslizante de terceros que estropeó los efectos de onda para todo el diseño y agregué explícitamente este tema a todas las vistas en las que se puede hacer clic.
fuente
Muestra un efecto dominó con color en API +21 y un fondo gris simple en la prensa para API -21. Agrega este estilo:
Y configúrelo en la vista:
fuente
android:theme
y no lo que la gente suele usarstyle
.La respuesta aceptada es incorrecta.
La forma correcta de usar es lo que Liuting mencionó en el comentario. Usar en
colorControlHighlight
lugar deandroid:colorControlHighlight
para cambiar el valor predeterminadocolorControlHighlight
deAppCompat
* Consulte http://android-developers.blogspot.co.uk/2014/10/appcompat-v21-material-design-for-pre.html en la sección Temas *
fuente
Siga los pasos siguientes:
your_layout.xml
styles.xml
fuente
Este código me funciona para crear una onda:
No encontré ninguna forma de modificar el atributo selectableItemBackground. Por eso lo hice como arriba.
fuente
En la aplicación de tema negro oscuro (o cualquier otra), intente usarla como se muestra a continuación, primero cree
ripple_effect.xml
en ladrawable
carpeta y agregue código comoluego configure el fondo en su vista Cualquiera, como
Linear layout, Button, TextView
etc.fuente
Utilice el atributo de primer plano como selectableItemBackground y el atributo de fondo como el color que desee.
fuente
How can I modify ripple color when using ?attr/selectableItemBackground as background?