Récemment, j'ai lu ces articles:
Bibliothèque de support de conception Android
Bibliothèque de support Android, révision 22.2.0
Mais aucun d'entre eux ne me donne un exemple détaillé sur la création d'un nouveau FloatingActionButton
. Si difficile à comprendre, je pose cette question.
Quelqu'un peut-il m'en donner un exemple?
Toute aide sera appréciée. Merci d'avance.
ÉDITER
Je viens de trouver quelques problèmes sur FloatingActionButton
(FAB), et je souhaite améliorer une autre réponse. Voir ma réponse ci-dessous.
android
android-support-library
floating-action-button
android-design-library
Anggrayudi H
la source
la source
Réponses:
Donc, dans votre
build.gradle
fichier, ajoutez ceci:Remarque AndroidX: Google introduit de nouvelles bibliothèques d'extensions AndroidX pour remplacer les anciennes bibliothèques de support. Pour utiliser AndroidX, assurez- vous d'
gradle.properties
abord que vous avez mis à jour votre fichier , modifiébuild.gradle
pour définircompileSdkVersion
sur28
(ou supérieur), et utilisez la ligne suivante au lieu de la précédentecompile
.Ensuite, dans votre
themes.xml
oustyles.xml
ou autre, assurez-vous de définir ceci - c'est la couleur d'accentuation de votre application - et la couleur de votre FAB, sauf si vous la remplacez (voir ci-dessous):Dans le XML de la mise en page:
Ou si vous utilisez la bibliothèque de matériaux AndroidX ci-dessus, vous utiliserez plutôt ceci:
Vous pouvez voir plus d'options dans les documents ( documents sur les matériaux ici) (
setRippleColor
, etc.), mais l'une d'entre elles est:Un autre intéressant - pour changer la couleur d'arrière-plan d'un seul FAB, ajoutez:
(par exemple pour le changer en rouge) en XML ci-dessus.
Quoi qu'il en soit, dans le code, une fois que la vue de l'activité / du fragment est gonflée ...
Observations:
Voici un moyen de supprimer ou de modifier le rembourrage s'il y en a trop:
En outre, j'allais placer le FAB par programme sur la "couture" entre deux zones dans un RelativeLayout en saisissant la hauteur du FAB, en divisant par deux et en l'utilisant comme décalage de marge. Mais myFab.getHeight () a renvoyé zéro, même après que la vue ait été gonflée, semblait-il. Au lieu de cela, j'ai utilisé un ViewTreeObserver pour obtenir la hauteur uniquement après avoir été disposé, puis défini la position. Consultez cette astuce ici . Cela ressemblait à ceci:
Je ne sais pas si c'est la bonne façon de le faire, mais cela semble fonctionner.
Si vous voulez le FAB sur une "couture", vous pouvez utiliser
layout_anchor
etlayout_anchorGravity
voici un exemple:N'oubliez pas que vous pouvez automatiquement faire sauter le bouton du chemin lorsqu'un Snackbar apparaît en l'enveloppant dans un CoordinatorLayout .
Plus:
la source
android:backgroundTint="#FF0000"
par exemple à FloatingActionBar dans le XML. (ajoutant à la réponse)sp
dans la propriété evelation. Ça devrait êtreapp:elevation="4dp"
FloatingActionButton
à aCoordinatorLayout
, vous pouvez utiliserapp:layout_anchor="element_with_seam"
etapp:layout_anchorGravity="bottom|right|end"
pour positionner correctement le FAB sur une couture - voir la mise en page activity_detail de cheesesquareJe viens de trouver quelques problèmes sur FAB et je veux améliorer une autre réponse.
Problème de setRippleColor
Ainsi, le problème surviendra une fois que vous aurez défini la couleur d'ondulation (couleur FAB sur pression) par programmation
setRippleColor
. Mais, nous avons encore une autre façon de le définir, c'est-à-dire en appelant:Votre projet doit avoir cette structure:
Et le code de
fab_ripple_color.xml
est:Enfin, modifiez légèrement votre FAB:
Pour le niveau d'API 21 et supérieur, définissez la marge droite et inférieure sur 24dp:
Guides de conception FloatingActionButton
Comme vous pouvez le voir sur mon code xml FAB ci-dessus, j'ai défini:
En définissant ces attributs, vous n'avez pas besoin de définir
layout_marginTop
et àlayout_marginRight
nouveau (uniquement sur pré-Lollipop). Android le placera automatiquement sur le côté droit de l'écran, ce qui est identique au FAB normal dans Android Lollipop.Ou, vous pouvez l'utiliser dans
CoordinatorLayout
:elevation
et 12dppressedTranslationZ
, selon ce guide de Google.la source
pressedTranslationZ
. Je ne savais pas ça.app:elevation
etapp:pressedTranslationZ
. Leur valeur par défaut est celle définie dans les directives de conception des matériaux. Quoi qu'il en soit, e.shishkin a raison, les valeurs sontapp:elevation:6dp
etpressedTranslationZ:6dp
. Vous pouvez le vérifier dans le code source deFloatingActionButton
s'étendImageView
. Donc, c'est simple comme introduire unImageView
dans votre mise en page. Voici un exemple XML.app:borderWidth="0dp"
est ajouté comme solution de contournement pour les problèmes d'élévation.la source
pour AndroidX, utilisez comme
la source
Si vous avez déjà ajouté toutes les bibliothèques et que cela ne fonctionne toujours pas, utilisez:
au lieu de:
Et tout fonctionnera bien :)
la source