2

Sur toutes mes mises en page, les effets d'ondulation de mes FloatingActionButtons persistent si l'utilisateur lève son doigt en dehors de la vue FAB. c'est-à-dire que l'utilisateur appuie sur le FAB blanc, l'ondulation se produit en virant au gris FAB, l'utilisateur tire le doigt du bouton et le soulève, et le bouton reste gris.FAB Effet d'ondulation persistant en dehors des points de vue

Voici un XML fab exemple:

<android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab_pinfav" 
      android:layout_width="@dimen/fab_size" 
      android:layout_height="@dimen/fab_size" 
      android:src="@drawable/icon_unfavd" 
      app:elevation="8dp" 
      android:elevation="8dp" 
      android:layout_gravity="bottom|end" 
      android:layout_marginRight="@dimen/spacingMedium" 
      android:layout_marginEnd="@dimen/spacingMedium"/> 

Et tous les fabs sont les enfants directs de CoordinatorLayouts de base différentes, à savoir

<android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

testé sur divers appareils allant de Android 5.1 à Android 7.1, avec le même problème sur chacun.

Je n'ai pas vu d'occurrences similaires sur mes autres vues car elles réagissent aux effets tactiles.

EDIT: Google connexes Problème https://code.google.com/p/android/issues/detail?id=218956 (voir 'numéro 2') La question est présente dans la bibliothèque de conception v25.0.0 et non présent dans v23.4.0

FINAL EDIT: Ce bug a été corrigé avec le Version de la bibliothèque de support 25.1.0 https://developer.android.com/topic/libraries/support-library/revisions.html# Si vous rencontrez ce problème, mettez à jour la version de la bibliothèque de support vers la version 25.1.0.

Répondre

5

Je crois que cela est dû à un correctif fusionné pour corriger la zone cliquable FloatingActionButton dans les versions pré-Lollipop. Ce correctif remplace la méthode onTouchEvent() pour renvoyer false si le contact se produit en dehors de la zone de contenu. Malheureusement, cela a pour effet d'empêcher tout autre événement tactile reçu au View, de sorte qu'il ne reçoit jamais le ACTION_UP et ne met donc pas à jour son état enfoncé en conséquence.

Nous devrions être en mesure de résoudre ce correctif par le sous-classement FloatingActionButton, remplaçant onTouchEvent() nous, vérifier le retour de l'appel super, et le réglage correct de l'état pressé si l'événement a quitté la zone de contenu.

public class CustomFAB extends FloatingActionButton { 

    public CustomFAB(Context c, AttributeSet a) { 
     super(c, a); 
    } 

    // Additional constructors as needed 
    // ... 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     boolean result = super.onTouchEvent(ev); 
     if (!result) { 
      setPressed(false); 
     } 
     return result; 
    } 
} 
+0

Cela a fonctionné, merci. Donc le bug est dans la bibliothèque de support et non mon code; Votre solution soulèvera-t-elle des problèmes avec le support pré-sucette? En outre, serait-ce une meilleure solution provisoire de revenir à l'utilisation d'une ancienne version de la bibliothèque de support? À votre santé. – Demonsoul

+1

Je passais juste un test rapide sur ce que j'ai à disposition cette minute, qui est mon périphérique KitKat, et cela fonctionne comme prévu sur cette version. Je ne prévois pas de problèmes majeurs avec les autres versions, bien que, bien sûr, je n'ai pas testé partout. Vous pouvez certainement revenir à une version de bibliothèque plus ancienne, mais je ne suis pas sûr exactement ce que le problème de "zone cliquable" était, comme le commentaire de fusion est vague, il peut donc être un comportement moins souhaitable. Je ne sais pas non plus combien de temps pourrait durer cet intérim, car il semble qu'ils n'aient pas encore abordé la question, même la source la plus récente que je puisse trouver. À votre santé! –

+1

J'ai découvert le problème connexe dans Google Issue Tracker ici: https://code.google.com/p/android/issues/detail?id=218956 Quelqu'un signale le problème comme présenté dans v23.4.0, donc plutôt que revenir en arrière, je vais utiliser cette solution CustomFAB. Je crois que votre solution est meilleure que ce que les gens ont suggéré là aussi, si vous voulez l'étendre. Merci! – Demonsoul