web-dev-qa-db-fra.com

Android à quoi sert l'attribut clipToPadding?

Je voudrais savoir ce que l'attribut clipToPadding fait pour ViewGroup dans Android?

J'ai consulté la documentation et certains sites Web, mais aucun de ceux que j'ai rencontrés n'explique vraiment ce que cela signifie et ce que cela signifie. Enfin, aucun que je ne puisse comprendre, j'ai donc pensé que ce serait une bonne idée de le poser ici.

128
Ersen Osman

Vous pouvez utiliser clipToPadding pour les vues qui défilent. Supposons que vous ayez une vue en liste par exemple et que vous ayez un padding défini en haut et en bas. Normalement, le remplissage est visible quels que soient les éléments visibles à l'écran. Le diagramme ci-dessous représente une liste de 10 éléments, mais seuls 4 sont visibles à l'écran, avec les paramètres par défaut de clipToPadding:

  • (rembourrage)
  • point 4
  • point 5
  • point 6
  • point 7
  • (rembourrage)

Maintenant, si vous définissiez clipToPadding="false" au lieu d'être appliqué simplement à la vue entière, le remplissage des éléments finaux est appliqué, voici ce que vous verriez dans le même scénario:

  • point 4
  • point 5
  • point 6
  • point 7

Maintenant, si vous deviez faire défiler vers le haut ou le bas de la liste, voici ce que vous verriez:

  • (rembourrage)
  • objet 1
  • point 2
  • point 3
  • point 4

OR

  • point 7
  • point 8
  • point 9
  • point 10
  • (rembourrage)

Une utilisation pratique de ceci est que si vous avez un bouton d'action flottant, par exemple, vous devez utiliser clipToPadding en combinaison avec un remplissage du bas pour vous assurer que l'intégralité de l'élément du bas peut être vue sans être gênée par le FAB.

Cela a-t-il du sens?

326
Dom

Je sais que la réponse la mieux notée l'explique assez clairement dans le texte, mais comme son nom l'indique,

" Une image vaut mille mots "

Voici un GIF de 1500 représentant le même:

(Gauche: clipToPadding = "true" Droite: clipToPadding = "false")

enter image description here

220
pulp_fiction

Un bon usage de clipToPadding est décrit dans https://www.youtube.com/watch?v=O47H4PxMf9 (partie de conception matérielle d'Udacity bien sûr)

En utilisant clipToPadding="false", la vue de défilement défile au-dessus de l'icône Google Maps supérieure. Cela est dû au fait qu’ils sont tous deux dans la même FrameLayout.

google Play Store of google maps, showing cliptopadding

9
serv-inc

Je vous recommande de jeter un coup d'œil à cet article https://medium.com/google-developers/why-would-i-want-tofitssystemwindows-4e26d9ce1eec#.5x2hz7q0g

Ou peut-être souhaitez-vous que votre RecyclerView défile sous une barre de navigation transparente - en utilisant Android: fitsSystemWindows = "true" en conjonction avec Android: clipToPadding = "false", votre contenu défilant sera placé derrière le contrôle, mais lorsque vous faites défiler l'écran vers le bas, le dernier élément sera toujours complété au-dessus de la barre de navigation (plutôt que caché dessous!).

4
cpienovi