Aspect coordonator - Imagine de la imgur

Proiectare Android - Layout coordonator nr. 1: o introducere

Dispunerea coordonatorilor este descrisă ca un „FrameLayout super-powered”, în conformitate cu documentele. Este utilizat pentru a facilita modul în care vizualizările din aspectul dvs. interacționează între ele. Acest lucru se realizează prin crearea sau atribuirea unor comportamente specifice acestor vizualizări. Aceste comportamente sunt esențiale pentru ceea ce face ca designul materialului să fie unic și să includă interacțiuni familiare, cum ar fi sertarele și panourile glisante pentru a aluneca elementele și butoanele care se pot aluneca la alte elemente în timp ce se mișcă și se animă.

Să aruncăm o privire asupra Comportamentelor și a modului de funcționare a acestora. În următorul nostru articol, vom arăta un exemplu simplu despre cum să creăm un comportament care să permită interacțiunea de bază între vizualizări într-un CoordinatorLayout

Figura 1: Butonul de acțiune plutitoare care reacționează la Snackbar Imagine amabilitate lui Nikita Rusin

comportamente

Comportamentele sunt la baza coordonatorului Layouts. Ele reprezintă interacțiuni între 2 sau mai multe vizualizări în același aspect. În mod normal, sunt clasificate în următoarele:

1. Comportamente bazate pe aspect: de ex. când apare un snackbar din partea de jos, FloatingActionButton se traduce imediat în sus pentru a se acomoda cu vederea de intrare, așa cum se arată în figura 1 din stânga.
Ancorarea este, de asemenea, o formă de comportament bazat pe aspect, de exemplu atunci când un FloatingActionButton este ancorat la un AppBarLayout așa cum se vede în figura 2. Comportamentele bazate pe aspect tind să fie omniprezente în întregul cadru Android și, în general, cele mai ușoare de creat, așa că ne vom concentra asupra lor în acest articol.

Figura 2: Butonul de acțiune plutitor ancorat în AppBar (dreapta). Imagine amabilitate lui Saul Molinero

2. Comportamente bazate pe defilare: E.g. Când un RecyclerView și un AppBar există ambele în aCoordinatorLayout, când RecyclerView derulează, acesta va împinge AppBar un pic în sus, apoi va minimiza AppBar, pentru a continua derularea perfectă, așa cum se arată în Figura 2 (din stânga). Comportamentele bazate pe defilare implică ceva mai multă muncă pentru a le face să meargă și nu ne vom concentra mult pe ele deocamdată.

Dacă vă aruncați în codul oricărei vizualizări care conține un comportament, veți observa că un comportament este atașat la vedere utilizând o adnotare, așa cum se arată în EC-1, EC -2 și EC-3 de mai jos.

EC-1: AppBarLayout Behavior
@ CoordinatorLayout.DefaultBehavior (AppBarLayout.Behavior.class)
clasa publică AppBarLayout extinde LinearLayout
EC-2: FloatingActionButton Behavior
@ CoordinatorLayout.DefaultBehavior (FloatingActionButton.Behavior.class)
clasa publică FloatingActionButton extinde VisibilityAwareImageButton
EC-3: Snackbar Behavior
public class final Snackbar extinde BaseTransientBottomBar 

Utilizarea adnotării așa cum se arată în EC-1 și EC-2 este o modalitate de atașare a unui comportament la o vedere programatic. O vizualizare poate avea doar un atașament comportamental dat de ea. Este important să rețineți că un Snackbar și BaseTransientBottomBar părinte nu au un Behavior atașat la ele, chiar dacă amândouă interacționează cu FloatingActionButton atunci când este apăsat FloatingActionButton. Acest lucru arată că există o direcționalitate implicată atunci când vine vorba de Comportamente. Adică un comportament poate depinde de o altă viziune, dar nu neapărat invers. Pentru a vedea de ce, să ne uităm la modul în care comportamentele funcționează intern.

Implementarea comportamentelor

Când vine vorba de crearea de comportamente, clasa dvs. de comportament trebuie să extindă clasa Coordinator.Behaviors , unde V reprezintă punctul de vedere care va conține Comportamentul. Clasa Coordinator.Behaviors are mai multe metode care pot fi anulate pentru a regla fin Comportamentul dvs., cu toate acestea, există în special 3 metode care sunt esențiale pentru a trece peste.

Pentru a înțelege mai profund, vom folosi ca exemplu interacțiunea dintre FloatingActionButton și BottomSheet. (Vezi clasa FloatingActionButton $ Behavior)

1. layoutDependsOn (...)

Se folosește pentru a verifica dacă o anumită vedere din CoordinatorLayout este vizualizarea de care depinde comportamentul tău. De exemplu, FloatingActionButton va verifica dacă vizualizarea BottomSheet este o vizualizare de care depinde. Dacă da, va reveni adevărat.

2. onDependentViewChanged (...)

Odată ce aspectul a găsit o dependență, acesta va începe să observe respectiva dependență. De exemplu, după ce FloatingActionButton a identificat că depinde de BottomSheet, această metodă va asculta modificările pe BottomSheet și va informa FloatingActionButton. Exemplul de cod (EC-5) de mai jos arată acest lucru. Iată unde merge logica de gestionare a interacțiunii.

EC-5: Iată codul sursei FloatingActionButton
@Trece peste
public boolean onDependentViewChanged (CoordinatorLayout parent, FloatingActionButton child,
        Afișați dependența) {
    if (dependență instanță de AppBarLayout) {
        // Dacă depindem de un AppBarLayout, îl vom afișa / ascunde automat
        // dacă FAB este ancorat la AppBarLayout
        updateFabVisibilityForAppBarLayout (părinte, dependență (AppBarLayout), copil);
    } else if (isBottomSheet (dependență)) {
        updateFabVisibilityForBottomSheet (dependență, copil);
    }
    returnare falsă;
}

După cum putem vedea, această metodă verifică pentru a vedea tipul de vizualizări în CoordinatorLayout, în cazul nostru AppBarLayout și BottomSheet, pentru AppBarLayout, se va ancora la ea, iar pentru BottomSheet, se va ascunde sau se va traduce în sus în funcție de în diverse condiții.

3. onDependentViewRemoved (...)

Această metodă este similară cu onDependentViewChanged (), cu toate acestea, informează vizualizarea atașată, respectiv FloatingActionButton, dacă BottomSheet a fost eliminat din CoordinatorLayout. Butonul FloatingAction va reacționa în consecință, reapărând pr traducându-se în jos dacă nu a dispărut.

Există mai multe metode oferite de coordonatorul.Behaviors class care oferă mai multă granularitate. Aceste 3 sunt cele mai de bază și importante, în special peDependentViewChanged

Concluzie

După cum vedeți, dispunerea coordonatorilor, dacă este folosită în mod corespunzător, este un mecanism foarte puternic pentru a orcheta interacțiunile dintre punctele de vedere imbricate. Este un instrument util pentru interacțiunea vizualizării, scoțând la iveală idealurile Mișcării materiale.

În următorul nostru articol vom vedea cum să ne creăm propriile comportamente personalizate! Crede-mă că este mai ușor decât crezi. Multumesc pentru citit!
Pace!