Обновить
5.82

Jetpack Compose *

декларативный UI Framework для Android

Сначала показывать
Порог рейтинга
Уровень сложности

Пишем транзишинометр для Андроид. Как понять, что мои экраны открываются быстро?

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров3K

Все Android-разработчики хотят одного: чтобы интерфейс их приложения был плавным и отзывчивым, а переходы экранов — быстрыми. Уверенность в плавности и чёткости интерфейса дают замеры метрик. Но как измерить ту самую плавность, как оценить гладкость анимаций? У кого-нибудь есть плавнометр или транзишинометр?

Google даёт нам Macrobenchmark и JunkStats — инструменты для оценки общей отзывчивости и стабильности интерфейса. Но их недостаточно, чтобы понять, быстро ли у нас открываются экраны.

В этой статье мы поговорим о том, как получить полную картину по метрикам UI-перформанса. Как замерить плавность и отзывчивость интерфейса, и как оценить время открытия экрана — одно из самых частых действий для пользователя. Напишем собственный транзишинометр и замерим рендер экрана до первого onDraw и до последнего, причём и во Fragments, и в Compose.

Читать далее

О зацикливании рекомпозиции в Jetpack Compose

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.4K

Фотограф: Laura Cleffmann: https://www.pexels.com/ru-ru/photo/20001993/

Jetpack Compose — это мощный инструмент, который упрощает создание UI в Android, но его освоение может быть не таким уж простым. Многие разработчики сталкиваются с неожиданными результатами и ошибками, которые на первый взгляд кажутся неочевидными. Сегодня разберем один из таких примеров и посмотрим, как зациклить рекомпозицию в Compose — и самое главное, как этого избежать.

Читать далее

Обзор решений описания и обновления state экрана в Сompose

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.8K

Всем привет. В этой статье я предлагаю рассмотреть, как в Compose можно описать, обновить и масштабировать состояние экрана с помощью паттерна MVI.

Читать далее

Диалог — часть навигации или нет?

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.7K

Как в вашей навигации устроена работа с диалогами? В статье я делаю обзор на то что такое Диалог в Material Design на Android. Когда это считается компонент, а когда это визуальный стиль и почему не надо помещать в навигацию то, что хочется открыть чтобы потом с этим...

Читать далее

Как написать Android приложение, которое не будет стыдно положить в портфолио. Гайд для новичков в Android разработке

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров18K

Гайд по написанию Android-приложения с нуля, используя лучшие архитектурные подходы – Clean Architecture и MVI, они обеспечат поддерживаемость, тестируемость и масштабируемость приложения, что особенно важно для сложных и долгосрочных проектов.

Читать далее

Кастомный Date and Time picker как в Telegram на Kotlin Jetpack Compose

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров5.3K

Вдохновившись классными колесиками для выбора времени и даты напоминаний Telegram я захотел сделать на одном из своих пет‑проектов что‑то подобное. Первой мыслью было — найти этот код в исходниках Telegram, но т.к. скорее всего, у них это написано на Java, я решил не играть в лотерею и не тратить время на раскопки в Java‑коде, потому что я хотел сделать это на «реактивном ранце».

Читать далее

Взаимодействие с клавиатурой в Compose: особенности и подводные камни

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.7K

Привет, Хабр!

На связи Глеб Гутник, мобильный разработчик из компании xStack. В этой статье мы рассмотрим, как можно эффективно кастомизировать взаимодействие с клавиатурой в Jetpack Compose и Compose Multiplatform для создания комфортного UX.

Для того, чтобы пользователь мог полноценно взаимодействовать с интерфейсом, мы, мобильные разработчики, ежедневно решаем простую, казалось бы, задачу: поля ввода формы на экране всегда должны быть видны и находиться выше клавиатуры.

На Android для этого предусмотрен флаг android:windowSoftInputMode="adjustResize", но он сжимает окно приложения без учета анимации клавиатуры, поэтому пользователь видит пустое поле долю секунды, пока клавиатура открывается:

Читать далее

Основы Jetpack Compose: как обеспечить стабильность вашего кода

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров17K

Привет, меня зовут Вера, я Android‑разработчик в Яндекс Диске. Мы в Диске сейчас активно работаем над переездом на Compose с использованием дизайн‑системы. Про стабильность в Compose есть немало статей, однако ошибки продолжают cовершаться, поэтому решила поделиться своим опытом в формате ликбез‑статьи.

По моему опыту, многие кто начинают писать на Compose, делают это интуитивно. Почему? Чтобы привыкнуть, понять, осознать подход к декларативному UI — нужно много времени, и поэтому к пониманию стабильности приходят, как правило, сильно позже. Однако это важно, ведь правильно организованная стабильность уменьшает количество рекомпозиций, что улучшает производительность и плавность работы приложения.

Читать далее

Используем Yandex MapKit с Compose Multiplatform. Часть 2

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4.2K

Разбираем библиотеку для интеграции Yandex MapKit SDK в compose проект, в том числе и мультиплатформенный. Позволяет работать с картой как с composable контентом, изменять состояние карты, удобно отображать, изменять и удалять объекты на карте. И что наиболее интересно – использовать compose ui для задания элементов на карте.

Читать далее

Проигрывание GIF в KMP Desktop

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров529

Я — Денис, Middle Android-разработчик в «Black Bricks». Недавно в нашем KMP проекте возникла необходимость добавить рекламный баннер с GIF. В этом кейсе я расскажу, с какими трудностями мы столкнулись и как удалось реализовать этот функционал.

Читать далее

Композим иконки. Улучшаем семантику и скорость отрисовки

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров4.6K

Привет! Меня зовут Алексей, я работаю Android-разработчиком в Облаке Mail. Наша команда отвечает за возвращаемость пользователей в сервис. Чтобы сделать использование Облака приятным и удобным, мы проводим редизайн приложения, переписывая старый пользовательский интерфейс на Jetpack Compose по новым макетам. Для упрощения создания новых экранов мы разрабатываем UI Kit с готовыми Composable-компонентами.

Во время работы над новыми экранами мне часто приходилось использовать множество различных иконок, разбросанных по всему проекту. Это навело на мысль: было бы здорово собрать все иконки в UI Kit в единственном экземпляре и использовать их только оттуда — по аналогии с тем, как это делают дизайнеры в Figma. И тогда я вспомнил об одной особенности Jetpack Compose.

Читать далее

Как я писал враппер для Яндекс Карт на KMP. Часть 1

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров2.5K

Враппер Yandex MapKit SDK для работы в Kotlin Multiplatform. Опыт написания враппера для SDK и адаптация работы с Compose Multiplatform. Рассказывается про интересные кейсы в процессе разработки враппера для MapKit SDK и способы адаптации библиотек для KMP проектов.

Читать далее

Кастомная тема Jetpack Compose

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.9K

Уверен, что каждый, кто использовал цветовые схемы в Android приложениях для раскраски интерфейса, хоть раз задавался вопросом "А как можно поменять скучные цвета primary, secondary, tertiary и др. на свои?" В этой статье речь пойдет как раз про использование своей цветовой схемы для работы с приложением.

Читать далее

Ближайшие события

Что стоит знать о Jetpack Compose: руководство для начинающих

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров8.3K

Салют, Хабр! На связи Вадим, Android Developer из Clevertec. Когда я начинал разбираться с Jetpack Compose, он показался простым. Но первое впечатление обманчиво. Поэтому написал этот туториал для начинающих, который сэкономит время на погружение.

Читать далее

Compose Desktop ShadowJar

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.1K

По состоянию на 12 августа 2024 года нет хорошего туториала/документации по Compose Desktop ShadowJar.

Существующие руководства помогут настроить ComposeMultiplatform для распространения нативных таргетов.

Но что, если вы хотите использовать ShadowJar, чтобы каждый пользователь мог запустить ваше приложение через .jar?

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

Эта статья, вероятно, не предоставит полного охвата вашего частного случая. Более того, не каждый пользователь сможет запустить созданный .jar файл. Например, пользователь с Java 8 не сможет запустить .jar файл, который был построен с использованием более поздней версии Java. Но это не относится напрямую к статье.

Читать далее

PinLockSreen на основе KeyStore. Kotlin. Jetpack Compose

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.1K

В данной любительской статье разберемся, что такое KeyStore в контексте мобильной разработки, для чего нужен и применим его в крайне легком варианте. Также погрузимся в разработку экрана входа в ваше приложение. Статья будет разделена на 3 так называемых раздела — KeyStore, UI и ViewModel.

Читать далее

Как заглянуть под капот Composable функции

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров6.9K

Возникал ли у тебя когда-нибудь вопрос о том, как посмотреть, во что Compose Runtime превращает наши Composable-функции, например, когда ты сделал оптимизацию и хочешь понять, что она работает так, как ты ожидаешь? Если да, то ты по адресу. Привет! Меня зовут Абакар, работаю главным техлидом в Альфа-Банке. В статье попробую разобраться, как Composable-функции меняются при компиляции и как работает аннотация @Composable.

Читать далее

Видео с прозрачностью на Jetpack Compose – запросто

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров3.2K

Статья рассчитана на читателя продвинутого уровня, уже знакомого с Jetpack Compose и Android‑разработкой в целом.

Привет! Меня зовут Владимир, и я мобильный разработчик в компании Финам. В своей практике мы активно используем Android Jetpack Compose, который зарекомендовал себя с лучшей стороны.

В статье я хочу показать простой способ решения известной в Android‑разработке проблемы — проигрывания видео‑файла с полноценной прозрачностью. В Compose для этого пока нет готовых компонентов, поэтому разработчику приходится придумывать разные хитрости.

Какая может быть польза от этого решения? Ответ очевиден — любая сложная анимация в приложении с минимальным размером. Например, мультик на картинке для привлечения внимания занимает всего 370 КБ памяти при размере кадра 480×270.

Узнать как

Как мы в Яндекс Путешествиях на Compose стёкла морозили

Время на прочтение5 мин
Количество просмотров1.6K

Всем привет! Меня зовут Антон Урывский, я Android-разработчик в Яндекс Вертикалях. Мы создаём знакомые всем сервисы: Яндекс Путешествия, Недвижимость и Аренда, Авто.ру. 

Сегодня я поделюсь опытом создания фичи, которая блюрит не содержимое View, а всё, что находится под ним. На iOS такой эффект морозного стекла достигается достаточно легко, а вот на Android всё не так просто, и я уверен, что многие разработчики сталкивались со сложностями при работе с ним. 

Моё большое путешествие началось со специфического ТЗ: заблюрить всё под View. «Приятным бонусом» стали поддержка на API 28–35. Для тех, кто не в курсе, BlurRenderEffect из коробки доступен только с API 31 с реализацией средствами Compose. А для нас очень важно, чтобы даже пользователи более старых смартфонов могли пользоваться всеми функциями приложения и видеть их так, как задумывала команда.

Вот и все вводные. Можем поплакать и начать.

Читать далее

Архитектура кроссплатформенного многомодульного приложения

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров11K

Хочу поделиться своим опытом создания кроссплатформенного приложения на базе kotlin-multiplatform (KMP), организации его архитектуры, настройки для работы с различными библиотеками и особенностями его работы. Статья подойдет в первую очередь разработчикам, которые уже имеют опыт с многомодульными проектами в android и начинают изучать KMP. В конце я опишу свою реализацию архитектурного паттерна MVI и его применение в проекте.

Читать далее