Как проектировать экраны в Android Studio и делать их адаптивными

Короткий ответ: Activity — контейнер и точка навигации; Fragment — переиспользуемый UI-блок; для адаптации используйте ConstraintLayout, resource qualifiers (sw600dp, layout‑land), dimens и отдельные layout‑файлы для планшетов/ориентаций. Ниже — практическая инструкция шаг за шагом.

Activity vs Fragment: ответственность и когда что выбирать

  • Activity — инициализирует каркас: Toolbar, BottomNavigation, NavHostFragment, обрабатывает Intent, разрешения и системные callbacks. Создавайте новую Activity, когда нужен отдельный навигационный стек, другая тема/окно или независимая точка входа (deep link, результат из другого приложения).
  • Fragment — экранный блок с собственной логикой и ViewModel; подходит для переиспользования, динамической перестановки в одном Activity (вкладки, мастер‑шаги, master–detail). На планшетах комбинируйте несколько Fragment в одном Activity.

Короткий чек-лист:

  • Нужен самостоятельный стек/тема/точка входа → Activity.
  • Нужна перестановка блоков/повторное использование в разных контейнерах → Fragment.

Подход «одна Activity — много Fragment» упрощает навигацию и поддержку, особенно с Jetpack Navigation.

Разметка и Layout Editor: лучшие практики

  • Корень экрана: ConstraintLayout — минимальная вложенность, гибкие constraints, chains, guidelines и barriers.
  • Для списков используйте RecyclerView (а не ScrollView с набором view).
  • FrameLayout / FragmentContainerView — контейнеры под Fragment/оверлеи.
  • LinearLayout — для простых строк/малых блоков, но не для сложных экранов.
  • В редакторе: работайте в Design для быстрой расстановки, в Code — для точного контроля margins, styles и повторного использования.
  • Обязательные правила:
    • Используйте 0dp (match_constraints) для растягиваемых элементов в ConstraintLayout.
    • Привязывайте элементы по baseline/center/edges; исправляйте предупреждения «Not constrained…».
    • Вынесите размеры, отступы и цвета в values (styles, dimens).
    • Шрифты — в sp, отступы и размеры — в dp.

Практический приём: создайте отдельный layout для каждого Fragment, а Activity держит только контейнер(ы) и общие элементы интерфейса.

Адаптация под размеры и ориентации

  • Ресурсные каталоги:
    • res/layout/ — базовая разметка.
    • res/layout-sw600dp/ — планшеты (ширина ≥600dp).
    • res/layout-land/ — альбомная ориентация.
    • res/values-sw600dp/dimens.xml — увеличенные отступы/размеры.
  • Изображения: отдавайте предпочтение VectorDrawable; если растровые — кладите в density‑папки.
  • Всегда используйте dp и sp; не применяйте px.
  • Master–detail паттерн: в res/layout/activity_main.xml — один FragmentContainerView; в res/layout-sw600dp/activity_main.xml — два рядом (список + детали).
  • Тестирование: Device Preview в Android Studio, эмуляторы разных форм‑факторов и хотя бы одно реальное устройство. Проверяйте системный масштаб шрифтов и поведение при нехватке места.

Типичная ошибка — верстать под один эмулятор. На другом устройстве текст может обрезаться, кнопки уйдут за экран.

Частые ошибки

  • Глубокая вложенность view → тормоза; замените на ConstraintLayout или оптимизируйте.
  • Жёсткие размеры в layout вместо dimens и match_constraints.
  • Игнорирование accessibility: не масштабируете шрифты, не проверяете contentDescription.
  • Отсутствие альтернативных layout для sw600dp/land.

FAQ

  • Нужно ли делать всё в одной Activity? Нет — выбирайте подход в зависимости от навигации и сложности. «Одна Activity» удобна с Navigation Component.
  • Как хранить общие стили? В styles.xml и themes; размеры — в dimens.xml.
  • Как проверить планшетную разметку? Используйте layout-sw600dp и Device Preview + эмуляторы.
  • Что быстрее: VectorDrawable или PNG? Vector более универсален и масштабируем; PNG нужен при сложной графике или поддержке очень старых API.

Заключение: проектируйте экран как набор переиспользуемых блоков (Fragment) внутри каркаса (Activity), используйте ConstraintLayout и ресурсы с qualifiers для адаптации. Так интерфейс будет поддерживаемым и корректно отображаться на телефонах и планшетах.