Efecto 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:')
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
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":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
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:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
¿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
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Luego, en su fragmento antes de la inflación en onCreateView()
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color
View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
return view;
}
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:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
deberías aplicarlo como tema:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
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.
colorControlHighlight
lugar deandroid:colorControlHighlight
funciona mejor para mí, de lo contrario, es solo para v21 +