Расположение координатора - изображение из imgur

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

Расположение Координатора описывается как «сверхмощный FrameLayout» в соответствии с документами. Он используется для облегчения взаимодействия представлений в макете. Это делается путем создания или назначения определенных Поведений для этих представлений. Эти Поведения являются основой того, что делает Material Design уникальным, и включают в себя знакомые взаимодействия, такие как выдвижные ящики и панели для отклоняемых пальцем элементов и кнопок, которые прилипают к другим элементам по мере их перемещения и анимации.

Давайте посмотрим на поведение и как они работают. В нашей следующей статье мы покажем простой пример того, как создать поведение, которое обеспечивает базовое взаимодействие между представлениями в CoordinatorLayout

Рисунок 1: Плавающая кнопка действия, реагирующая на Snackbar Изображение предоставлено Никитой Русиным

поведения

Поведения лежат в основе CoordinatorLayouts. Они представляют взаимодействия между двумя или более представлениями в одном макете. Они обычно подразделяются на следующие:

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

Рисунок 2: Плавающая кнопка действия, привязанная к панели инструментов (справа). Изображение предоставлено Сол Молинеро

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: FloatingActionButton Behavior
@ CoordinatorLayout.DefaultBehavior (FloatingActionButton.Behavior.class)
открытый класс FloatingActionButton расширяет VisibilityAwareImageButton
EC-3: Поведение снек-бара
открытый финальный класс Snackbar extends BaseTransientBottomBar 

Использование аннотации, как показано в EC-1 и EC-2, является способом программной привязки поведения к представлению. Представление может иметь только одну привязанность к нему. Важно отметить, что Snackbar и его родительский BaseTransientBottomBar не имеют привязанного к ним Поведения, даже если они оба взаимодействуют с FloatingActionButton при нажатии FloatingActionButton. Это говорит о том, что в поведении задействована направленность. Значение поведения может зависеть от другого взгляда, но не обязательно наоборот. Чтобы понять почему, давайте посмотрим, как внутреннее поведение работает.

Реализация поведения

Когда дело доходит до создания Поведения, ваш класс Поведения должен расширять класс Coordinator.Behaviors , где V представляет представление, которое будет содержать Поведение. Класс Coordinator.Behaviors имеет несколько методов, которые можно переопределить для точной настройки вашего поведения, однако есть 3 метода, которые особенно важны для переопределения.

Чтобы получить более глубокое понимание, мы будем использовать взаимодействие между FloatingActionButton и BottomSheet в качестве примера. (См. Класс поведения $ FloatingActionButton)

1. layoutDependsOn (…)

Используется для проверки того, является ли определенное представление в CoordinatorLayout видом, от которого зависит ваше поведение. Например, FloatingActionButton проверит, является ли представление BottomSheet представлением, от которого оно зависит. Если это так, он вернет истину.

2. onDependentViewChanged (…)

Как только макет найдет зависимость, он начнет наблюдать эту зависимость. Например, как только FloatingActionButton определил, что он зависит от BottomSheet, этот метод будет прослушивать изменения в BottomSheet и сообщать FloatingActionButton. Пример кода (EC-5) ниже показывает это. Вот где движется логика для взаимодействия.

EC-5: Вот код из источника FloatingActionButton
@Override
public boolean onDependentViewChanged (CoordinatorLayout parent, дочерний элемент FloatingActionButton,
        Посмотреть зависимость) {
    if (экземпляр зависимости AppBarLayout) {
        // Если мы зависим от AppBarLayout, мы будем показывать / скрывать его автоматически
        // если FAB привязан к AppBarLayout
        updateFabVisibilityForAppBarLayout (parent, (AppBarLayout) зависимость, дочерний элемент);
    } else if (isBottomSheet (зависимость)) {
        updateFabVisibilityForBottomSheet (зависимость, дочерний элемент);
    }
    вернуть ложь;
}

Как мы видим, этот метод проверяет, чтобы увидеть тип представлений в CoordinatorLayout, в нашем случае AppBarLayout и BottomSheet, для AppBarLayout, он будет привязываться к нему, а для BottomSheet он будет скрываться или переводиться вверх в зависимости от на разных условиях.

3. onDependentViewRemoved (…)

Этот метод похож на onDependentViewChanged (), однако он информирует о присоединенном представлении, то есть FloatingActionButton, если BottomSheet был удален из CoordinatorLayout. Затем FloatingActionButton будет реагировать соответствующим образом, повторно отображая pr, переводя вниз, если он не исчез.

Класс Coordinator.Behaviors предлагает больше методов, которые обеспечивают большую степень детализации. Эти 3 являются самыми основными и важными, особенно onDependentViewChanged

Заключение

Как видите, компоновка координат при правильном использовании является очень мощным механизмом для организации взаимодействия между вложенными представлениями. Это полезный инструмент для визуального взаимодействия, в конечном итоге выявляющий идеалы Материального Движения.

В нашей следующей статье мы увидим, как создавать наши собственные модели поведения! Поверь мне, это проще, чем ты думаешь. Спасибо за чтение!
Мир!