Effet d'entraînement sur les appareils pré- et Lollipop +
harrane et Liuting ont raison. La réponse acceptée n'est pas la meilleure façon. Permettez-moi de montrer dans le code comment changer la couleur des ondulations pour les versions pré-Lollipop et supérieures
Votre AppTheme doit hériter de n'importe quel thème AppCompat et contenir l'attribut colorControlHighlight (sans le préfixe «android:»)
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Votre vue doit contenir clickable = "true" (ou doit avoir un écouteur de clic défini par programme) et l'arrière-plan doit être "? Attr / selectableItemBackgroundBorderless" ou "? Attr / selectableItemBackground":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Remarque: si votre vue parente a un fond blanc, vous ne verrez pas d'effet d'entraînement car elle est blanche. Changer la valeur colorControlHighlight pour une couleur différente
De plus, si vous voulez différentes couleurs d'ondulation sur différentes activités, vous pouvez définir un thème personnel pour chaque activité dans le fichier Manifest, par exemple:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Différentes couleurs d'ondulation pour différents fragments dans la même activité?
Vous pouvez modifier les attributs du thème d'activité pour chaque fragment lors de l'exécution. Il suffit de les écraser avant que le fragment ne soit gonflé avec votre style personnalisé et de l'appliquer à un thème actuel:
dans values / styles.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Ensuite, dans votre fragment avant l'inflation dans 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;
}
Ce style ne fonctionnera que pour ce fragment
Différentes couleurs d'ondulation pour différentes vues? (Sucette +)
Vous pouvez changer la couleur d'ondulation pour chaque vue séparément en utilisant l'
colorControlHighlight
attribut, cela ne fonctionne pas si vous les appliquez directement à une vue:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
vous devez l'appliquer comme thème:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS En outre, parfois, cette approche aide si vous avez des problèmes inconnus d'ondulation et que vous ne pouvez pas le comprendre. Dans mon cas, j'ai utilisé une bibliothèque coulissante tierce qui a gâché les effets d'entraînement pour toute la mise en page et l'ajout explicite de ce thème à toutes les vues cliquables a fonctionné pour moi.
colorControlHighlight
au lieu deandroid:colorControlHighlight
fonctionne mieux pour moi, sinon ce n'est que pour la v21 +