Comment puis-je modifier la couleur de l’ondulation lorsque vous utilisez? Attr / selectableItemBackground comme arrière-plan?

J’ai vu des questions SO et ils ont donné quelques méthodes possibles pour réaliser ce que je veux. Par exemple:

  1. Utilisez l’atsortingbut colorControlHighlight dans styles.xml.

    Voici mes styles-v21.xml:

      #5677FC ?attr/selectableItemBackground  

    Et mon widget:

      

    Et ça ne marche pas. J’ai aussi essayé d’append parent="Theme.AppCompat au style” SelectableItemBackground “, ou de passer à colorControlHighlight(no android: prefix)" , ou bien à ?android:attr/selectableItemBackground , aucun n’est utile.

  2. Utilisez l’atsortingbut backgroundTint dans la présentation.

    Donc, j’ajoute android:backgroundTint="#5677FC" à mon TextView . Toujours inutile. Ensuite, j’ai essayé de changer android:backgroundTintMode en src_in et src_atop , et ils ne font jamais la différence.

Alors, comment puis-je changer la couleur de l’ondulation lorsque j’utilise ?attr/selectableItemBackground comme arrière-plan. Je me concentre uniquement sur Lollipop et au-dessus. Merci d’avance!

Enfin, je trouve la solution: au lieu d’utiliser android:colorControlHighlight directement dans le thème SelectableItemBackground , je devrais écrire un autre style:

  

Alors:

  

Ajoutez enfin style="@style/SelectableItemBackground" à View in layout.xml.

MISE À JOUR LE 2016/8/26 Après la publication de N, j’ai constaté que parfois nous ne pouvons pas utiliser cette méthode pour définir la couleur de l’ondulation pour un type de View (par exemple, CardView ). Maintenant, je recommande fortement les développeurs utilisant RippleDrawable , qui peuvent également être déclarés en XML. Voici un exemple:

Je veux montrer un effet d’entraînement lorsque l’utilisateur touche / clique sur un CardView au-dessus de l’API21, et bien sûr, il doit y avoir un autre type de retour avant Lollipop. Je devrais donc écrire:

  

et drawable dans le dossier selectable_item_background drawable :

     

drawable-v21 dans le dossier drawable-v21 :

    

enfin, le ripple_black dans drawable (ou drawable-v21 ):

   

C’est tout. Pour d’autres vues, vous devriez peut-être utiliser android:background="@drawable/selectable_item_background" . N’oubliez pas de définir un OnClickListener , OnTouchListener ou quelque chose comme ça pour eux, sinon l’ondulation ne s’affichera pas.

Harrane et Liuting ont raison. La réponse acceptée n’est pas la meilleure solution. Permettez-moi de montrer en code comment changer la couleur de l’ondulation pour les versions pré-Lollipop et supérieures

  1. Votre AppTheme devrait hériter de tout thème AppCompat et contenir l’atsortingbut colorControlHighlight (sans préfixe “android:”)

       
  2. Votre vue devrait contenir clickable = “true” et l’arrière-plan devrait être “? Attr / selectableItemBackgroundBorderless” ou “? Attr / selectableItemBackground”:

      

Remarque: si votre vue parente a un arrière-plan blanc, vous ne verrez pas d’effet d’effet car il est blanc. Modifier la valeur colorControlHighlight pour une couleur différente

En outre, si vous souhaitez utiliser différentes couleurs d’ondulation sur différentes activités, vous pouvez définir un thème personnel pour chaque activité du fichier manifeste, par exemple:

   

UPD: Et si vous voulez différentes couleurs d’ondulation pour différents fragments d’une même activité?

Vous devez modifier les atsortingbuts du thème d’activité pour chaque fragment au moment de l’exécution. Il suffit de les écraser avant que fragment ne soit gonflé avec votre style personnalisé et de l’appliquer à un thème actuel:

dans les valeurs / styles.xml

   

Ensuite, dans votre fragment avant 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

UPD 2: Corrigez-moi si je me trompe mais semble que l’atsortingbut colorControlHighlight ne fonctionne pas dans les mises en page si vous les appliquez à une vue:

    

et ne fonctionne que lorsqu’il est défini sur un thème

La réponse acceptée est fausse.

La manière correcte d’utiliser est ce que Liuting a mentionné dans le commentaire. Utilisez colorControlHighlight au lieu d’ android:colorControlHighlight pour changer le colorControlHighlight par défaut d’ AppCompat

* S’il vous plaît se référer à http://android-developers.blogspot.co.uk/2014/10/appcompat-v21-material-design-for-pre.html dans la section Theming *