Préface
Il n'y a pas si longtemps, j'ai lu un article sur Bottom Sheet, et après avoir consulté mes collègues, j'ai décidé d'implémenter cette chose dans notre application. Après avoir passé suffisamment d'heures à enseigner à Bottom Sheet comment voyager en quelques étapes (comme Google Maps), j'ai réalisé sa matité et ses limites. Deux solutions ont été trouvées: pour tout envelopper dans un flux qui surveillera l'état du rideau allongé en temps réel ou pour réécrire certaines méthodes de la classe BottomSheetBehavior (heureusement, la licence Apache 2.0 vous permet de le faire). J'ai choisi la deuxième option, car elle me semblait plus viable, et maintenant, sur la base de mon expérience, je vais essayer de vous dire ce qui en est sorti. J'espère que cela sera utile à quelqu'un. Eh bien, commençons.
Personnalisation
Je saute les étapes de création d'un projet, en y ajoutant la feuille de fond de Google, car si vous lisez ceci, vous avez déjà surmonté tout ce qui précède. Nous devrons accéder à la classe BottomSheetBehavior et copier son contenu dans la nouvelle classe CustomBottomSheetBehavior que nous avons créée. Une fois copié, n'oubliez pas de renommer tout ce qui est marqué en rouge. De plus, dans le fichier .xml de notre feuille de fond, nous devons renommer cette ligne, en référence à notre nouvelle classe, cela devrait se produire comme ceci:
app:layout_behavior="com.my.custombottomsheetexample.CustomBottomSheetBehavior"
Et donc, nous avons plus de 700 lignes de code Java qui semblent effrayantes, alors qu'en faites-vous?
Vous devez d'abord trouver la méthode onViewReleased ():
public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { ... }
Nous devons changer seulement quelques lignes. Nous trouvons le premier if {...} et remplaçons son contenu par ce code:
if (yvel < 0.0F) { currentTop = releasedChild.getTop(); if (currentTop > CustomBottomSheetBehavior.this.halfExpandedOffset) { top = CustomBottomSheetBehavior.this.halfExpandedOffset; targetState = 6; } else { top = 0; targetState = 3; } }
Maintenant, notre BottomSheet avance en 2 étapes, s'arrêtant au milieu:
(
)
Changement de hauteur
Mais ce n'est pas tout, vous pouvez ajuster la hauteur moyenne. Pour ce faire, tous dans la même classe, recherchez l'initialisation de la variable halfExpandedOffset:
this.halfExpandedOffset = this.parentHeight / 2;
En regardant cette ligne, il devient clair que nous pouvons ajuster la hauteur comme nous le souhaitons, même en termes de pourcentage. Personnellement, j'ai préféré changer comme ça:
this.halfExpandedOffset = this.parentHeight * 60 / 100;
(
)
My BottomSheet étend 40% de la hauteur de la vue principale. C’est tout!