Оформление на координатора - изображение от imgur

Android Дизайн - Координатор №1: Въведение

Координаторът е описан като „супер захранващ FrameLayout“ според документите. Използва се за улесняване на взаимодействието на изгледите в оформлението ви. Това става чрез създаване или присвояване на конкретни поведения на тези изгледи. Тези поведения са основни в това, което прави Дизайн на материала уникален, и включват познати взаимодействия като плъзгащи се чекмеджета и панели за прекарване на елементи и бутони, които се придържат към други елементи, докато се движат и оживяват.

Нека да разгледаме поведенията и как работят. В следващата ни статия ще покажем прост пример за това как да създадем поведение, което позволява основно взаимодействие между гледните точки в CoordinatorLayout

Фигура 1: Бутон с плаващо действие, реагиращ на Snackbar Image с любезност на Никита Русин

Поведение

Поведенията са в основата на CoordinatorLayouts. Те представляват взаимодействия между 2 или повече изгледа в едно и също оформление. Обикновено се категоризират в следното:

1. Поведение, основано на оформлението: напр. когато Snackbar се появи отдолу, FloatingActionButton веднага превежда нагоре, за да побере входящия изглед, както е показано на фигура 1 вляво.
Закрепването е също форма на поведение, основано на оформление, например, когато FloatingActionButton е закотвен към AppBarLayout, както се вижда на фигура 2. Поведенията, базирани на оформлението, са склонни да бъдат повсеместни в Android Framework и като цяло най-лесното за създаване, така че ще се съсредоточим върху тях в тази статия.

Фигура 2: Бутон с плаващо действие, закотвен към AppBar (вдясно). С любезното съдействие на Саул Молинеро

2. Поведение на превъртане: напр. Когато RecyclerView и AppBar съществуват в aCoordinatorLayout, когато RecyclerView превърта, той ще натисне AppBar малко нагоре и след това ще сведе до минимум AppBar, така че да продължи да превъртате безпроблемно, както е показано на фигура 2 (вляво). Поведенията, базирани на превъртания, включват малко повече работа, за да ги продължите и засега няма да се фокусираме много върху тях.

Ако се потопите в кода на който и да е изглед, който съдържа поведение, ще забележите, че поведението е прикачено към изгледа чрез използване на пояснения, както е показано в EC-1, EC -2 и EC-3 по-долу.

EC-1: AppBarLayout Behavior
@ CoordinatorLayout.DefaultBehavior (AppBarLayout.Behavior.class)
обществен клас AppBarLayout разширява LinearLayout
EC-2: Поведение на плаващото действие
@ CoordinatorLayout.DefaultBehavior (FloatingActionButton.Behavior.class)
публичен клас FloatingActionButton разширява VisibilityAwareImageButton
EC-3: Поведение в снекбара
обществен финален клас Snackbar разширява BaseTransientBottomBar 

Използването на поясненията, както е показано в EC-1 и EC-2, е начин за прикачване на поведение към изглед програмно. Изгледът може да има само един прикачен поведение към него. Важно е да се отбележи, че Snackbar и неговият родител BaseTransientBottomBar нямат прикрепено поведение към тях, въпреки че и двете взаимодействат с FloatingActionButton при натискане на FloatingActionButton. Това показва, че има насоченост, когато става дума за поведения. Значението на поведение може да зависи от друг възглед, но не непременно обратното. За да разберем защо, нека разгледаме как поведението работи вътрешно.

Изпълнение на поведенията

Когато става въпрос за създаване на поведения, вашият клас поведение трябва да разшири класа координатор. Поведение , където V представлява изгледа, който ще съдържа поведението. Класът Coordinator.Behaviors има няколко метода, които могат да бъдат отменени, за да се прецизира вашето поведение, но има по-специално 3 метода, които са от съществено значение за преодоляване.

За да разберем по-задълбочено, ще използваме взаимодействието между FloatingActionButton и BottomSheet като пример. (Вижте класа FloatingActionButton $ Behavior)

1. layoutDependsOn (…)

Използва се за проверка дали определен изглед в CoordinatorLayout е изгледът, от което зависи вашето поведение. Например, FloatingActionButton ще провери дали изгледът BottomSheet е изглед, от който зависи. Ако е така, то ще се върне вярно.

2. onDependentViewChanged (…)

След като оформлението намери зависимост, то ще започне да наблюдава тази зависимост. Например, след като FloatingActionButton установи, че зависи от BottomSheet, този метод ще изслуша промени в BottomSheet и ще информира FloatingActionButton. Примерен код (EC-5) по-долу показва това. Ето къде отива логиката за справяне с взаимодействието.

EC-5: Ето код от източника на FloatingActionButton
@Override
обществен булев onDependentViewChanged (КоординаторLayout родител, FloatingActionButton дете,
        Вижте зависимостта) {
    ако (зависимост на instanceof AppBarLayout) {
        // Ако сме в зависимост от AppBarLayout, ще го покажем / скрием автоматично
        // ако FAB е закотвен към AppBarLayout
        updateFabVisibilityForAppBarLayout (родителска, (AppBarLayout) зависимост, дете);
    } else if (isBottomSheet (зависимост)) {
        updateFabVisibilityForBottomSheet (зависимост, дете);
    }
    върнете невярно;
}

Както можем да видим, този метод проверява, за да види вида изгледи в CoordinatorLayout, в нашия случай AppBarLayout и BottomSheet, за AppBarLayout, той ще се закотви към него, а за BottomSheet ще се скрие или преведе нагоре в зависимост от при различни условия.

3. onDependentViewRemoved (…)

Този метод е подобен на onDependentViewChanged (), но той информира прикачения изглед, т.е. FloatingActionButton, ако BottomSheet е отстранен от CoordinatorLayout. След това FloatingActionButton ще реагира съответно чрез повторно появяване на pr превеждане надолу, ако не е изчезнал.

Има повече методи, предлагани от клас Coordinator.Behaviors , които предлагат повече подробности. Тези 3 са най-основните и важни, особено onDependentViewChanged

заключение

Както можете да видите, разположението на координатора, ако се използва по подходящ начин, е много мощен механизъм за организиране на взаимодействия между вложените му изгледи. Това е полезен инструмент за взаимодействие с гледка, в крайна сметка извеждайки идеалите на материалното движение.

В следващата ни статия ще видим как да създадем собствени потребителски поведения! Повярвай ми, че е по-лесно, отколкото си мислиш. Благодаря за четенето!
Мир!