Διάταξη συντονιστή - Εικόνα από imgur

Σχέδιο Android - Συντονιστής Διάταξη # 1: Εισαγωγή

Η διάταξη του συντονιστή περιγράφεται ως ένα "υπερπαραγωγό FrameLayout" σύμφωνα με τα docs. Χρησιμοποιείται για να διευκολύνει τον τρόπο αλληλεπίδρασης των απόψεων μέσα στη διάταξή σας. Αυτό γίνεται με τη δημιουργία ή την ανάθεση συγκεκριμένων Συμπεριφορών σε αυτές τις απόψεις. Αυτές οι συμπεριφορές είναι βασικές για το τι καθιστά το Σχεδιασμό Υλικού μοναδικό και περιλαμβάνει γνωστές αλληλεπιδράσεις όπως συρόμενα συρτάρια και πίνακες για στοιχεία και κουμπιά που μπορούν να απορρίπτονται από τα δάκτυλα και τα κουμπιά που κολλάνε σε άλλα στοιχεία καθώς κινούνται και ζωντανεύουν.

Ας ρίξουμε μια ματιά στις συμπεριφορές και πώς λειτουργούν. Στο επόμενο άρθρο θα δείξουμε ένα απλό παράδειγμα για το πώς να δημιουργήσουμε μια Συμπεριφορά που να επιτρέπει τη βασική αλληλεπίδραση μεταξύ των απόψεων σε έναν συντονιστήLayout

Εικόνα 1: Κουμπί μεταβλητής ενέργειας που αντιδρά στο Snackbar Η εικόνα προσφέρθηκε από τον Nikita Rusin

Συμπεριφορές

Οι συμπεριφορές αποτελούν τον πυρήνα του CoordinatorLayouts. Αντιπροσωπεύουν αλληλεπιδράσεις μεταξύ 2 ή περισσότερων προβολών στην ίδια διάταξη. Κατά κανόνα ταξινομούνται στα εξής:

1. Συμπεριφορές που βασίζονται στη διάταξη: π.χ. όταν ένα Snackbar εμφανίζεται από κάτω, το FloatingActionButton μεταφράζεται αμέσως προς τα πάνω για να φιλοξενήσει την εισερχόμενη προβολή, όπως φαίνεται στην Εικόνα 1 στα αριστερά.
Η αγκύρωση είναι επίσης μια μορφή διάταξης που βασίζεται στη διάταξη, για παράδειγμα όταν ένα FloatingActionButton είναι αγκυροβολημένο σε ένα AppBarLayout όπως φαίνεται στο σχήμα 2. Οι συμπεριφορές που βασίζονται στη διάταξη είναι τείνουν να είναι πανταχού παρούσες σε ολόκληρο το Android Framework και γενικά είναι πιο εύκολο να δημιουργηθούν. πάνω τους σε αυτό το άρθρο.

Εικόνα 2: Κουμπί μεταβλητής ενέργειας που είναι αγκυρωμένο στο AppBar (δεξιά). Εικόνα ευγενική προσφορά του Saul Molinero

2. Συμπεριφορές με κύλιση: π.χ. Όταν ένα RecyclerView και το AppBar υπάρχουν σε aCoordinatorLayout, όταν το RecyclerView μετακινηθεί, θα σπρώξει το AppBar προς τα πάνω και στη συνέχεια θα ελαχιστοποιήσει το AppBar, έτσι ώστε να συνεχίσει να μετακινείται χωρίς προβλήματα όπως φαίνεται στο Σχήμα 2 (στα αριστερά). Οι συμπεριφορές που βασίζονται στην κύλιση συνεπάγονται λίγο περισσότερη δουλειά για να προχωρήσουν και δεν θα επικεντρωθούμε πολύ σε αυτές για τώρα.

Αν βυθίσετε στον κώδικα οποιασδήποτε προβολής που περιέχει μια συμπεριφορά, θα παρατηρήσετε ότι μια συμπεριφορά επισυνάπτεται στην προβολή χρησιμοποιώντας έναν σχολιασμό, όπως φαίνεται στα EC-1, EC -2 και EC-3 παρακάτω.

EC-1: Συμπεριφορά AppBarLayout
@ CoordinatorLayout.DefaultBehavior (AppBarLayout.Behavior.class)
η δημόσια τάξη AppBarLayout επεκτείνει το LinearLayout
EC-2: Συμπεριφορά FloatingActionButton
@ CoordinatorLayout.DefaultBehavior (FloatingActionButton.Behavior.class)
η δημόσια κλάση FloatingActionButton επεκτείνει το VisibilityAwareImageButton
EC-3: Συμπεριφορά σνακ μπαρ
η δημόσια τάξη Snackbar επεκτείνει το BaseTransientBottomBar 

Η χρήση του σχολιασμού όπως παρουσιάστηκε στις EC-1 και EC-2 είναι ένας τρόπος για την προσάρτηση μιας Συμπεριφοράς σε μια προβολή προγραμματιστικά. Μια προβολή μπορεί να έχει μόνο ένα δεδομένο συνημμένο Συμπεριφορά σε αυτό. Είναι σημαντικό να σημειωθεί ότι ένα Snackbar και το γονικό BaseTransientBottomBar του δεν έχουν συνημμένη συμπεριφορά, παρόλο που και οι δύο αλληλεπιδρούν με το FloatingActionButton όταν πιέζεται το FloatingActionButton. Αυτό δείχνει ότι υπάρχει κατεύθυνση όσον αφορά τις συμπεριφορές. Σημαίνει ότι μια συμπεριφορά μπορεί να εξαρτάται από μια άλλη όψη, αλλά όχι απαραίτητα αντίστροφα. Για να δείτε γιατί, ας δούμε πώς λειτουργούν οι συμπεριφορές εσωτερικά.

Εφαρμογή των συμπεριφορών

Όταν πρόκειται να δημιουργήσετε Συμπεριφορές, η τάξη της Συμπεριφοράς σας πρέπει να επεκτείνει την κλάση Coordinator.Behaviors , όπου το V αντιπροσωπεύει την προβολή που θα περιέχει τη Συμπεριφορά. Η ομάδα συντονιστών.Βοήθεια έχει αρκετές μεθόδους που μπορούν να αντικατασταθούν για την τελειοποίηση της συμπεριφοράς σας, ωστόσο υπάρχουν 3 μέθοδοι ιδιαίτερα απαραίτητες για την αντικατάσταση.

Για να πάρετε μια βαθύτερη κατανόηση, θα χρησιμοποιήσουμε ως παράδειγμα την αλληλεπίδραση μεταξύ του FloatingActionButton και του BottomSheet. (Δείτε την κλάση Συμπεριφοράς FloatingActionButton $)

1. layoutDependsOn (...)

Χρησιμοποιείται για να ελέγξει αν μια συγκεκριμένη προβολή στο CoordinatorLayout είναι η άποψη στην οποία εξαρτάται η συμπεριφορά σας. Για παράδειγμα, το FloatingActionButton θα ελέγξει αν η προβολή BottomSheet είναι μια προβολή από την οποία εξαρτάται. Αν ναι, πρέπει να επιστρέψει αλήθεια.

2. onDependentViewChanged (...)

Μόλις η διάταξη βρει εξάρτηση, θα αρχίσει να παρατηρεί αυτή την εξάρτηση. Για παράδειγμα, μόλις το FloatingActionButton εντοπίσει ότι εξαρτάται από το BottomSheet, αυτή η μέθοδος θα ακούσει τις αλλαγές στο BottomSheet και θα ενημερώσει το FloatingActionButton. Ο παρακάτω κωδικός (EC-5) δείχνει αυτό. Εδώ είναι όπου η λογική για να χειριστεί την αλληλεπίδραση πηγαίνει.

EC-5: Εδώ είναι ο κώδικας από την πηγή FloatingActionButton
@Καταπατώ
δημόσια boolean onDependentViewChanged (CoordinatorLayout γονέας, FloatingActionButton παιδί,
        Προβολή εξάρτησης) {
    αν (παράδειγμα εξάρτησης AppBarLayout) {
        // Αν εξαρτάται από ένα AppBarLayout, θα το δείξουμε / θα το αποκρύψουμε αυτόματα
        // αν το FAB είναι αγκυρωμένο στο AppBarLayout
        updateFabVisibilityForAppBarLayout (γονέας, (AppBarLayout) εξάρτηση, παιδί)?
    } else αν (isBottomSheet (εξάρτηση)) {
        updateFabVisibilityForBottomSheet (εξάρτηση, παιδί);
    }}
    επιστροφή ψευδής?
}}

Όπως βλέπουμε, αυτή η μέθοδος ελέγχει για να δει τον τύπο των προβολών στο CoordinatorLayout, στην περίπτωση μας AppBarLayout και BottomSheet, για το AppBarLayout, θα το αγκυροβολήσει σε αυτό και για το BottomSheet θα κρυφτεί ή θα μεταφραστεί προς τα πάνω ανάλογα σε διάφορες συνθήκες.

3. onDependentViewRemoved (...)

Αυτή η μέθοδος είναι παρόμοια με την onDependentViewChanged () αλλά ενημερώνει τη συνημμένη προβολή δηλαδή το FloatingActionButton εάν το BottomSheet έχει αφαιρεθεί από το CoordinatorLayout. Το FloatingActionButton θα αντιδράσει ανάλογα ανατρέχοντας pr μεταφέροντας προς τα κάτω αν δεν είχε εξαφανιστεί.

Υπάρχουν περισσότερες μέθοδοι που προσφέρονται από την κλάση Coordinator.Behaviors που προσφέρουν μεγαλύτερη ευκρίνεια. Αυτές οι 3 είναι οι πιο βασικές και σημαντικές, ιδιαίτερα στο DependentViewChanged

συμπέρασμα

Όπως βλέπετε, η Διάταξη Συντονιστή, αν χρησιμοποιείται σωστά, είναι ένας πολύ ισχυρός μηχανισμός για ενορχηστρωτικές αλληλεπιδράσεις μεταξύ των ενσωματωμένων απόψεών του. Είναι ένα χρήσιμο εργαλείο για την αλληλεπίδραση προβολής, που φέρνει τελικά τα ιδανικά της Υλικής κίνησης.

Στο επόμενο άρθρο θα δούμε πώς να δημιουργήσουμε τις δικές μας προσαρμοσμένες συμπεριφορές! Πιστέψτε με είναι πιο εύκολο από ό, τι νομίζετε. Ευχαριστώ για την ανάγνωση!
Ειρήνη!