Skip to content

Latest commit

 

History

History
61 lines (40 loc) · 3.89 KB

File metadata and controls

61 lines (40 loc) · 3.89 KB

Главная

Кастомные вью

Официальная документация

Простой пример реализации

Подробная презентация

Когда создавать

  • Нарушается принцип DRY в UI. Сочетание элементов используется в нескольких местах.
  • Расширение поведения имеющихся компонент.
  • Разбиения существующих layout для уменьшения сложности кода.
  • Отображение объекта из слоя model или другого сложного объекта.

В отличии от layout содержит логику отображения (изменяемые состояния, логика заполнения). Если есть возможность обойтись одним layout c последующим использованием ей нужно воспользоваться.

Принципы построения custom view

  • Максимально декларативно - стараться как можно больше кода, связанного с внешним видом отобразить в xml файлах верстки, а не в файле класса view.

  • Использование атрибутов - помогает легче добиться успеха с предыдущим пунктом

  • Должна полноценно отображаться в редакторе Android Studio. Этому способствует

    • использование атрибутов из нэймспейса tools: для прототипирования. Например tools:text, tools:showIn

    • установка дефолтного состояния с данными.

  • Не должна требовать дополнительной инициализации (вызова дополнительных методов кастомной вью в теле активити, фрагмента и тп.) для корректной работы. Подразумевается, что вью имеет дефолтное состояние.

  • Использование в качестве корневого тега merge для уменьшения вложенности иерархии view. Для корректного отображения в превью проставляется тег tools:parentTag =(имя класса той вью с которой будет происходить мерж)

  • Не устанавливать внешние отступы внутри кастомной вью. На разных экранах и размерах экрана часто требуются разные отступы. Отступы следует задавать в той разметке где вью используется.

  • Перевод в необходимое состояние происходит через методы render() или bind() в зависимости от архитектуры. Вне вью могут быть доступны только листнеры. Запрещается взаимодейтсвовать с внутренними свойствами вью напрямую.