Compose Broadcast
5.82K subscribers
342 photos
88 videos
558 links
Все о Jetpack Compose и Compose Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Android - @android_broadcast
iOS - @ios_broadcast
Kotlin - @kotlin_broadcast
Download Telegram
ComposeDialogs - библиотека со множеством различных модальных окон, которые можно показать как диалог или Bottom Sheet. Дизайн Material 3 и поддержка только Android

#material #android
👍40👎1
Вышел Material Design 3 для Compose версии 1.2
👉 Новые экспериментальный компоненты - PullToRefreshContainer и PullToRefreshState
👉 Новый экспериментальный тип кнопок - Segmented Button
👉 Автоматическое скрытие/появление BottomBar при скролле
👉 Рефакторинг SwipeToDismiss
👉 Badge и BadgedBox теперь стабильные
👉 Сhip тоже стабильные
👉 Больше цветов в палитре цветов для большой кастомизации приложения, а также теперь она стала работать лучше
👉 Разные типы Surface

Больше подробностей в release notes

#material #design #android @compose_broadcast
21👍10🔥2
Forwarded from Android Broadcast
Всем кто разрабатывает под Android TV возрадуйтесь - первая Beta Jetpack Tv-Material 1.0 на Compose

#androidtv #compose #material #дизайн #jetpack #jetpackupdate
👍13👏10🎉2
Media is too big
VIEW IN TELEGRAM
MaterialKolor - Compose MP библиотека для создания динамической палитры цветов из Material Design 3. Это аналог генератора на сайте m3.matierial.io

#material #multiplatform #compose @compose_broadcast
👌22👍9
Пример(EN,4м) реализации Pull-to-Refresh из Material 3 Compose библиотеки

#material #android #compose
👍9
Статья (EN, 3м) со сравнением TextField и BasicTextField из Compose
👉 TextField соответствует гайдам Material Design
👉 BasicTextField базовая Composable функция для работы с вводом текста без привязки к UI системе


#compose #material
👍24👌1
⚙️ Почему я не использую *Screen и выбираю Pane подход

Когда речь заходит о создании UI на Jetpack Compose с поддержкой смартфонов, планшетов и десктопов, важно не привязываться к физическим размерам экрана.

Чего я избегаю?
Я не использую именование Composable-экранов через *Screen, например:
// !!! не делайте так для экрана фичи
@Composable
fun HomeScreen() { /* UI */ }


Такой подход жестко связывает UI с понятием "экрана устройства", а это не всегда корректно, особенно в мире foldable-устройств и десктопов. UI каждой фичи должен уметь работать на всём пространстве что ему выделит контейнер, где будет показ UI фичи.

Что я использую вместо этого?
Я применяю концепцию Pane – это независимые контейнеры UI, которые адаптируются под выделенное для них место и не должны понимать ничего о размерах экрана, ориентации, расположении. Контейнер, где встраивается UI, сам определит всё и настроит UI через Modifier.
@Composable
fun HomePane(modifier: Modifier = Modifier) {
Column(modifier = modifier.fillMaxSize()) {
Text("Welcome to Home")
// Остальной UI
}
}


Такой подход позволяет:
✔️ Легко компоновать UI для разных конфигураций (например, показывать две панели на планшете и одну на телефоне).
✔️ Избежать привязки к Screen, что делает код гибче.
✔️ Улучшить переиспользуемость UI-компонентов.

📌 Как применять Pane в адаптивном UI?

Простейший пример, где на планшетах и десктопе мы показываем две панели, а на телефонах – только одну:
// Рутовая Composable функция приложения, которая понимает про текущее состояние приложения 
// на экране и в зависимости от этого располагает контент
@Composable
fun RootScreen(windowSizeClass: WindowSizeClass) {
if (windowSizeClass.widthSizeClass == WindowWidthSizeClass.Expanded) {
// Большой экран
Row(Modifier.fillMaxSize()) {
HomePane(Modifier.weight(1f))
DetailsPane(Modifier.weight(1f))
}
} else {
// Маленький или средний
HomePane()
}
}


❗️ Также важной частью работы с Pane является передача в неё Modifier параметра, через который контейнер панели будет настраивать размещение и другие параметры Pane.

Пост - это мой взгляд и рекомендация. В архитектуре и рекомендациях нет абсолютного правильного или неправильного подхода. Выбирать как делать - остаётся на вашей стороне.

#compose #android #adaptive #material #советы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍77🔥61
⚙️ Вышел Compose Multiplatform 1.9.0: Web перешло в Beta

Что нового для всех таргетов:
👉 Аннотация @Preview в common коде теперь поддерживает задание параметров (имя для отображения, размеры и прочее)
👉 Больше возможностей по управлению тенями
👉 Адаптировали новое API для управления контекстным меню из Android под все платформы. Требуется включение через код
ComposeFoundationFlags.isNewContextMenuEnabled = true

👉 Тема Material Expressive
👉 Артефакт androidx.compose.runtime:runtime стал мультиплатформенным, перенеся наработки из org.jetbrains.compose.runtime:runtime
👉 runComposeUiTest() теперь позволяет запускать suspend функции в теле вызова

Compose/iOS
👉 Управление желаемой частотой кадров для рендера Composable
Modifier.preferredFrameRate(FrameRateCategory.High)
Modifier.preferredFrameRate(120f)

👉 Поддержка кастомизаций ввода, специфичных для iOS
BasicTextField(
value = "",
onValueChange = {},
keyboardOptions = KeyboardOptions(
platformImeOptions = PlatformImeOptions {
keyboardType(UIKeyboardTypeEmailAddress)
}
)
)


Compose/Web
🎉 Поддержка Web таргета перешло в Beta статус
👉 Поддержка Accessibility API
👉 Новое API для встраивания HTML
private val ttOSM =
"https://www.openstreetmap.org/export/embed.html?bbox=4.890965223312379%2C52.33722052818563%2C4.893990755081177%2C52.33860862450587&layer=mapnik"

@Composable
fun Map() {
Box(
modifier = Modifier.fillMaxWidth().fillMaxHeight()
) {
WebElementView(
factory = {
(document.createElement("iframe")
as HTMLIFrameElement)
.apply { src = ttOSM }
},
modifier = Modifier.fillMaxSize(),
update = { iframe -> iframe.src = iframe.src }
)
}
}

👉 Упростили связывание Jetpack Navigation c навигацией в браузере
// Код в Composable функции
LaunchedEffect(Unit) {
// Implicitly accesses the window object
navController.bindToBrowserNavigation()
}


Compose/Desktop
👉 Возможность настройки окна с контентом с помощью API SwingFrame() and SwingDialog(), аналогичные Window() and DialogWindow(). Разница то что новые API конфигурируются в init блоке до показа UI.

#compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥293👍2