View

Урок 2: Введение в XML, что такое View, теги и атрибуты

Итак мы планомерно вливаемся в разработку Android-приложений. Начинаем подготовку к верстке своего первого экрана для нашего учебного приложения для изучения английских слов. У меня в Figma есть дизайн-макет с несколькими экранами, так что представим, что это наш заказ на разработку или задачка с нового места работы. Только делать его будем не торопясь, соблюдая на начальных уроках […]
Читать полностью

Урок 3: Контейнеры — FrameLayout, LinarLayout. Отступы

Вложенность элементов в XML Итак, как вы уже поняли, XML – это язык разметки, который среди прочего позволяет задать вложенность элементов относительно друг друга. А атрибуты определяют свойства и характеристики элементов разметки. Элементами являются View. Вообще в целом интерфейс в Android приложениях – это набор вложенных друг в друга компонентов. Забегая немного вперед, слишком глубокая вложенность плохо […]
Читать полностью

Урок 5: Ресурсы (res), квалификаторы, локализация, шрифты

Типы ресурсов в Android В этом уроке углубимся в понимание различных типов ресурсов в каталоге res. Расскажу как их применять. При разработке приложений мы постоянно используем ресурсы. Если вы путаетесь в большом количестве непонятных файлов в папке res, то после просмотра этого урока вы будете понимать что означает каждый из них. В качестве практики импортируем […]
Читать полностью

Урок 6: Cтили, темы в приложении и их кастомизация 

Собственные стили в Android Продолжаем работать с ресурсами и сейчас я расскажу про то, как создавать собственные кастомные стили. Для объединения атрибутов во имя более удобной поддержки и расширяемости кода. Также обсудим как переопределять атрибуты стилей стандартных тем, чтобы они корректно работали на различных устройствах. Разберем файлик с темой приложения и кастомизируем ее. Создание кастомного […]
Читать полностью

Урок 7: findViewById, ViewBinding, backing property

После верстки мы изучили немного фундаментала по Android проекту, настало время научиться настраивать взаимодействие кода файла MainActivity.kt с макетом экрана. Атрибут id Окей. У нас есть некоторые элементы в макете, которые должны обрабатывать различные действия. Но как с ними взаимодействовать? Для этого на View вешается дополнительный атрибут — id, который мы уже использовали ранее. Разберем […]
Читать полностью

Урок 8: setOnClickListener() — обработка нажатий, property access

Взаимодействие с элементами экрана Мы научились обращаться к элементам экрана, теперь начинаем взаимодействовать с ними. И сейчас перед нами стоит задача научиться реагировать на нажатия кнопок и изменять контент на экране в зависимости от действия. Мы учимся работать с инструментами, поэтому, чтобы не занимать много времени допускаем некоторые педагогические упрощения. Учитывайте, здесь код не доводится […]
Читать полностью

Урок 10: AndroidManifest.xml (андройд манифест)

Введение Программирование и разработка приложений это не только написание кода, но и конфигурация приложения. Сейчас мы познакомимся с содержимым важнейшего файла проекта – AndroidManifest. Я расскажу про всего его теги и конфиги, а также покажу как выглядит финальный манифест после сборки приложения. В нем тоже много чего интересного. Отображение иерархии проектов Для начала обратимся к […]
Читать полностью

Атрибут weight и его влияние на производительность

При использовании обычного LinearLayout каждый из on… методов View вызывается его дочерних View только по одному разу, что делает его довольно быстрым. Если же использовать атрибут weight, то метод onMeasure() будет вызван по 2 раза на каждом View. Это делает производительность LinearLayout такой же, как у RelativeLayout и как может показаться не создает никаких проблем. […]
Читать полностью

Для чего нужен атрибут weight в LinearLayout?

Это атрибут, который указывает то, какую часть экрана займет View по сравнению с другими View, у которых тоже указан данный атрибут. При этом в зависимости от атрибута orientation, данный атрибут будет влиять на разные параметры View. Если у LinearLayout стоит orientation = VERTICAL, то атрибут weight будет влиять на height (высоту) дочернего View. А если […]
Читать полностью

Назовите отличия CoordinatorLayout от FrameLayout

CoordinatorLayout можно представить как FrameLayout на максималках. Это улучшенная версия FrameLayout. CoordinatorLayout рассчитан на использование в двух основных случаях В качестве top-level декора приложения или же chrome layout Когда необходимо настроить взаимодействие между layout и его дочерними view либо между дочерними view layout’а Используя CoordinatorLayout.Behavior можно настроить поведение дочерних view и самого layout при взаимодействии […]
Читать полностью

Расскажите про ViewGroup и View и в чем их различие?

ViewGroup – это класс, который наследуется от View. Он расширяет View и позволяет хранить в себе другие View, по сути это как контейнер. Все layout’ы являются ViewGroup. Так же этот класс будет базовым и для layout parameters. ViewGroup предоставляет невидимый контейнер для хранения других View (в том числе и других ViewGroup, не забываем, что ViewGroup […]
Читать полностью

Можно ли ViewModel заменить onSaveInstanceState()?

Не совсем. Вернее не всегда вьюмоделью можно заменить onSaveInstanceState(). Рассмотри такой случай, когда в нашей активити есть ViewModel, которая сохраняет наши данные. Так же эти же данные сохраняются в onSaveInstanceState(). Всего есть три варианта как будет создаваться активити: Активити запускается в первый раз. В таком случае никаких данный ни во ViewModel, ни в bundle savedInstanceState […]
Читать полностью

Паттерн MVVM

MVVM, — шаблон проектирования архитектуры приложений. Он упрощает разделение разработки графического интерфейса (view) от разработки бизнесс-логики (model). ViewModel в данном шаблоне проектирования является промежуточным звеном, которое помогает преобразовывать данные таким образом, чтобы их было легко представлять и ими было легко манипулировать. ViewModel берет на себя практически всю логику представления данных, View остается их только отобразить. […]
Читать полностью

Какие есть недостатки паттерна MVP

Вот несколько минусов MVP в Android-разработке Круговая зависимость View и Presenter. У View есть ссылка на Presenter, а у Presenter есть ссылка на View. Обычно это не так плохо, но стоит вспомнить, что в Андроид View — это как правило активити или фрагмент, у которых есть жизненный цикл. Поэтому необходимо создавать новый презентер при создании […]
Читать полностью

Паттерн MVP

MVP (Model-View-Presenter) — как и MVC, является шаблоном проектирования архитектуры приложения. Данный паттерн произошел от MVC и многое унаследовал от него. Но есть и отличия. Слои Model и View по своей сути такие же как и в MVC, но вот вместо слоя Controller, в данном паттерне появился слой Presenter. Его функции и роль немного отличаются […]
Читать полностью

Паттерн MVC

MVC (Model-View-Controller) — шаблон проектирования архитектуры приложений. Он используется чтобы разделить логику всего приложения на три элемента, связанных друг с другом. Это позволяет разделить представление информации “внутри” приложения и то, как эту информация видит и вводит пользователь. Благодаря этому упрощается поддержка приложения “на большой дистанции”, то есть в долгосрочной перспективе такое приложение будет легче поддерживать […]
Читать полностью

Расскажите про реализацию метода View.onMeasure()

onMeasure() — метод, необходимый, чтобы определить размеры View и его “детей”. Данный метод должен быть переопределен таким образом, чтобы быстро и точно возвращать размеры View и его “детей”. Так же есть установки на View от его родителей, который накладывают дополнительные ограничения. Сама же реализация выглядит примерно так: На вход onMeasure() поступает два аргумента: widthMesureSpec и […]
Читать полностью

Урок 14: Интерфейс Serializable – передача данных между Activity

Введение На предыдущем уроке мы узнали что такое объект Intent, как с помощью него осуществлять открытие нового Activity и передавать простые типы данных. Это база, так что если не смотрели, обязательно начните с предыдущего видео. Продолжаем тему и переходим к самому интересному – передаче объектов между Activity. Рассматривать будем прямые способы передачи данных с помощью […]
Читать полностью

Kotlin-практикум с Иваном Ветровым

Запишись бесплатно и получи приглашение на персональную работу

Бесплатная предзапись

Последние места в ближайшем потоке — старт завтра

  • Персональная работа с Иваном Ветровым 10 дней
  • 25 задач с персональным код-ревью
  • Настройка профессиональных инструментов
  • 3 проекта для портфолио + рекомендации
Подробнее про Onboarding
Специальное предложение - изучение Android разработки со скидкой