Сергей, продолжайте серию видео по Compose, это тренд и это будущее, по поводу xml против компоуз вы высказали свое мнение, но в принципе можно и с компоуза начинать если очень нравится и вот почему, на фоне удовольствия от компоуза можно выучить Room, Retrofit , корутины, флоу, чистую архитектуру, а потом если что не составит труда выучить xml, на фоне остального это будет малая часть и да, многие до сих пор на собесах требуют знания Java, если стараться все охватить, то быстро выгоришь.
Мне тоже очень нравится compose. Я уже даже и не знаю как в XML работать, мне кажется это так неудобно. Хотелось бы видеть например как можно в compose добавить карту Google или yandex. Или работа с room, в compose немного другая реализация. Ещё было бы неплохо рассказать про material design 3. Вот я Сергей губу то раскатал. Понимаю, что ты работаешь на голом интузиазме, так что жду любой урок по compose
Как раз таки PaddingValues нам нужен, чтобы контент не заходил под боттом бар. Оберните NavGraph в Box(modifier = Modifier.padding(it)) PS: вместо it можете сделать именованный параметр для лямбды paddingValues ->
Спасибо за урок!) Я совсем пропал, соскучился по урокам! Много работы и проблемы со светом, нет времени( Надеюсь, скоро смогу вернутся встрой) Тем более работаю как разработчик, compose нужен будет сто процентов
Получается в Jetpack Compose использование фрагментов фактически сводится на нет, интересно. Не могу представить ситуацию когда нужен именно фрагмент. Сергей, спасибо за уроки.
Как раз пытался разобраться и как то самому не получилось. Спасибо за подробное объяснение. Только вот в начальном примере, когда нажимаем на иконку она становится немного выше, а то, что сделали, выше не стает
Это из за текста “label”. Просто в BottomNavigation нужно добавить еще атрибут alwaysShowLabel = false . Тогда текст будет показывать только у выбранного элемента и это бант эффект что нажатая кнопка выше
Приветствую. У меня вопрос . А когда будут видео по Unity или С#? Или надо стать спонсором чтобы видеть эти уроки? Тот курс что у вас есть я прошёл весь. Много чего вы там обещали доделать так и не сделали)) Поэтому интересуюсь. Очень приятно и интересно смотреть ваши уроки.
@@NecoRuChannel я очень жду , и надеюсь что скоро продолжу покорять unity. Может посоветуйте книги которые можно почитать по этой теме , пока я буду ждать ваши прекрасные уроки.
При клике на item у вас каждый экран пересоздается заново. Как сделать, чтоб все 4 страницы загружались вместе, а потом только переключаться между ними ?
Сейчас используется не "BottomNavigation" , а "NavigationBar" и далее по уроку не "BottomNavigationItem", а "NavigationBarItem" ( Это тоже самое , просто на момент записи была альфа версия , а на актуальной версии с material3 пишется так )
@@NecoRuChannel еще смотри: ua-cam.com/video/EOQB8PTLkpY/v-deo.html Тут крутые трики для оптимизации списков и довольно просто реализуемые. Можешь сделать свою версию для не англо говорящих. Про навигацию спасибо, гляну
Привет, избах санкций удалили кнопку( Сейчас можно только приобрести напрямую у меня нужный вам курс или курсы. Вот моя почта: necodesarrollo@gmail.com
Спасибо за урок! вопрос по поводу "зависимости" если копирую из урока implementation "androidx.navigation:navigation-compose:2.6.0-alpha04" то всё работает а если обновляю до свежей версии то выходит ошибка Работать постоянно с "старыми" зависимостями или же всё-таки есть против ошибок оюновления таблетка?
Делаю на материал 3 и все заработало но не могу в NavigationBarItem выбрать параметр selectedContentColor и unselected. Я так понял что он как то по новому называется. Может кто то тоже делал на материал3, подскажите пожалуйста как эти цвета настроить
Если у кого-то еще появляется ошибка Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt при попытке запустить приложение на эмуляторе, то в build.gradle (module) нужно добавить строчку implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) в dependencies
Возможно у тебя библиотека material3, в видео код написан на библиотеке material. В material3 нет BottomNavigation, там используется NavigationBar. BottomNavigationItem теперь NavigationBarItem
Спасибо за ваш нелегкий труд, так подробно и понятно никто не объясняет
эпилепсия и дерготня по экрану мышкой, по уровням абстракции скачет как блоха по яйцам, еще и исходники не публикует
Просто лучший. Даже не знаю что бы я без тебя делал) Спасибо
Кто будет урок проходить. BottomNavigation это NavigationBar (BottomNavigationItem = NavigationBarItem)
Спасибо большое, а то не знал, почему у меня BottomNavigation не видит.
Спас дружище
Огромное спасибо, помогло)
Большое благодарствие за уроки))
спасибо за уроки
Большое спасибо 👍 Прекрасного дня 😎
Сергей, продолжайте серию видео по Compose, это тренд и это будущее, по поводу xml против компоуз вы высказали свое мнение, но в принципе можно и с компоуза начинать если очень нравится и вот почему, на фоне удовольствия от компоуза можно выучить Room, Retrofit , корутины, флоу, чистую архитектуру, а потом если что не составит труда выучить xml, на фоне остального это будет малая часть и да, многие до сих пор на собесах требуют знания Java, если стараться все охватить, то быстро выгоришь.
Мне тоже очень нравится compose. Я уже даже и не знаю как в XML работать, мне кажется это так неудобно.
Хотелось бы видеть например как можно в compose добавить карту Google или yandex. Или работа с room, в compose немного другая реализация. Ещё было бы неплохо рассказать про material design 3.
Вот я Сергей губу то раскатал. Понимаю, что ты работаешь на голом интузиазме, так что жду любой урок по compose
@@antonparfenov8519 compose для построения ui, все остальное тоже самое. Если работаешь с чистой архитектурой будет отличаться presentation слой
отличный урок
Спасибо за труд
Как раз таки PaddingValues нам нужен, чтобы контент не заходил под боттом бар. Оберните NavGraph в Box(modifier = Modifier.padding(it)) PS: вместо it можете сделать именованный параметр для лямбды paddingValues ->
За такие уроки лайк не глядя!
P.S. У кого тоже в студии electric eel 2022.1.1 не работает live edit literals?
Спасибо за труд! Отличный урок. Ждем продолжения по урокам jetpack compose)
Спасибо за урок!) Я совсем пропал, соскучился по урокам! Много работы и проблемы со светом, нет времени( Надеюсь, скоро смогу вернутся встрой) Тем более работаю как разработчик, compose нужен будет сто процентов
Спасибо Сергей!
Благодарю за урок
100й лайк под видосом был мой:_)
Получается в Jetpack Compose использование фрагментов фактически сводится на нет, интересно. Не могу представить ситуацию когда нужен именно фрагмент. Сергей, спасибо за уроки.
Очень ждём
Спасибо
Спасибо огромное
ЛАЙК ОТ СЕООНЛИ!
Как раз пытался разобраться и как то самому не получилось. Спасибо за подробное объяснение.
Только вот в начальном примере, когда нажимаем на иконку она становится немного выше, а то, что сделали, выше не стает
Это из за текста “label”. Просто в BottomNavigation нужно добавить еще атрибут alwaysShowLabel = false . Тогда текст будет показывать только у выбранного элемента и это бант эффект что нажатая кнопка выше
@@NecoRuChannel ух ты, понятно.
Приветствую. У меня вопрос . А когда будут видео по Unity или С#?
Или надо стать спонсором чтобы видеть эти уроки?
Тот курс что у вас есть я прошёл весь. Много чего вы там обещали доделать так и не сделали))
Поэтому интересуюсь. Очень приятно и интересно смотреть ваши уроки.
Привет, просто сделал перерыв слишком большой и все ни как не начну, хотя есть уже новый курс подготовленный. Постарапюсь скоро начать
@@NecoRuChannel я очень жду , и надеюсь что скоро продолжу покорять unity.
Может посоветуйте книги которые можно почитать по этой теме , пока я буду ждать ваши прекрасные уроки.
Всем доброго времени суток. У меня в андроид студио нету sealed class, подскажите пожалуйста чем его лучше заменить?
@@abu_umm_culsum привет, просто создаешь data class например и сам вписываешь что это sealed class
@@NecoRuChannel спасибо
делайте видео с говым шаблоном drawer navigation please
При клике на item у вас каждый экран пересоздается заново. Как сделать, чтоб все 4 страницы загружались вместе, а потом только переключаться между ними ?
А как передавать аргументы между экранами в bottom nagigation?
Когда будет видеоурок Retrofit?
Очень интересно узнать о Api серверы
Здравствуйте, у меня класс BottomNavigation(из Compose) не выходит. Я добавил зависимоть но не помогло. Можете помочь
Сейчас используется не "BottomNavigation" , а "NavigationBar" и далее по уроку не "BottomNavigationItem", а "NavigationBarItem" ( Это тоже самое , просто на момент записи была альфа версия , а на актуальной версии с material3 пишется так )
В общем просмотрел весь курс в надежде найти ответ на вопрос об организации навигации в приложении...к сожалению курс оборвался на начале нужной темы
Про навегацию я еще расскажу но уже есть отдельный урок об этом про BottomNavigation там как раз используем навигацию
@@NecoRuChannel еще смотри: ua-cam.com/video/EOQB8PTLkpY/v-deo.html
Тут крутые трики для оптимизации списков и довольно просто реализуемые. Можешь сделать свою версию для не англо говорящих.
Про навигацию спасибо, гляну
исходники где?
Здравствуйте, про Api серверы снимите ролик
Привет, на днях начну про Retrofit это думаю то что тебе нужно
Буду рад 👍
Здравствуйте, я пытался стать спонсором канала, чтобы получить доступ к закрытым роликам, но кнопка "Cпонсировать" отсутствует.
Как мне получить доступ???
Привет, избах санкций удалили кнопку( Сейчас можно только приобрести напрямую у меня нужный вам курс или курсы. Вот моя почта: necodesarrollo@gmail.com
@@NecoRuChannel я могу ещё на Udemy купить, но там цена кусачая, у вас есть промокод на скидку?
@@ВЕЗЕР-г1л А ну если можешь на Ufemy то могу промокод конечно дать самы дешевый 9.99
@@NecoRuChannel дайте пожалуйста промокод
Спасибо за урок!
вопрос по поводу "зависимости" если копирую из урока implementation "androidx.navigation:navigation-compose:2.6.0-alpha04" то всё работает а если обновляю до свежей версии то выходит ошибка
Работать постоянно с "старыми" зависимостями или же всё-таки есть против ошибок оюновления таблетка?
Для начала понять, что за ошибку выдает. Постоянно на старых зависимостях сидеть - это моветон.
@@Juliet-z8z
так же как и отвечать на годовые коментарии 😀 вопрос был год назад закрыт
@@Arhmed13 у кого как)
кто-нибудь живой знает как перейти с material 3 на material? Никак не могу избавиться от ошибок!
Привет, уже давно записал видео и шорт видео по этому поводу.
вот ссылки: ua-cam.com/video/jIBN_r50eIk/v-deo.html
ua-cam.com/users/shortsv75VXNORsdo
Спасибо большое за мгновенный ответ!!. ¡Eres un monstruo!
@@rumbospain Gracias!! Jajaja
Делаю на материал 3 и все заработало но не могу в NavigationBarItem выбрать параметр selectedContentColor и unselected. Я так понял что он как то по новому называется. Может кто то тоже делал на материал3, подскажите пожалуйста как эти цвета настроить
Вот
NavigationBarItem(selected = currentRoute == it.route, onClick = { /*TODO*/ }, icon = { painterResource(it.icon) }, label = { Text(it.title)}, colors = NavigationBarItemDefaults.colors(selectedIconColor = MaterialTheme.colorScheme.inversePrimary, selectedTextColor = MaterialTheme.colorScheme.inversePrimary,unselectedIconColor = MaterialTheme.colorScheme.inversePrimary, unselectedTextColor = MaterialTheme.colorScheme.inversePrimary))
@@frednekrasov7019 спасибо 👍
colors = NavigationBarItemDefaults.colors(
selectedIconColor = Color.Red,
unselectedIconColor = Color.Gray
)
Меняем цвет статус бара в MainActivity:
setContent {
window.statusBarColor = getColor(R.color.red)
MainScreen()
}
Если у кого-то еще появляется ошибка Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt при попытке запустить приложение на эмуляторе, то в build.gradle (module) нужно добавить строчку implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) в dependencies
Мужики что то у меня никак не получается запустить :(
постоянно выдаёт ошибку
подключено вот это dependencies {
implementation "androidx.navigation:navigation-compose:2.6.0-alpha04"
BottomNavigation.kt
import android.graphics.drawable.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import androidx.navigation.compose.currentBackStackEntryAsState
@Composable
fun BottomNavigation(
navController: NavController
) {
val listItems = listOf(
BottomItem.Screen1,
BottomItem.Screen2,
BottomItem.Screen3,
BottomItem.Screen4
)
androidx.compose.material.BottomNavigation( // ТУТ РУГАЕТСЯ на BottomNavigationItem
backgroundColor = Color.White
) {
val backStackEntry by navController.currentBackStackEntryAsState() // ТУТ РУГАЕТСЯ на currentBackStackEntryAsState
val currentRoute = backStackEntry?.destination?.route
listItems.forEach { item ->
BottomNavigationItem( // ТУТ РУГАЕТСЯ на BottomNavigationItem
selected = currentRoute == item.route,
onClick = {
navController.navigate(item.route)
},
icon = {
Icon( // ТУТ РУГАЕТСЯ на Icon
painter = painterResource(id = item.iconId), // ТУТ РУГАЕТСЯ на painter и painterResource и .iconId
contentDescription = "Icon" // ТУТ РУГАЕТСЯ на contentDescription
)
},
label = {
Text(
text = item.title,
fontSize = 9.sp
)
},
selectedContentColor = Color.Red,
unselectedContentColor = Color.Gray
)
}
}
}
Возможно у тебя библиотека material3, в видео код написан на библиотеке material. В material3 нет BottomNavigation, там используется NavigationBar.
BottomNavigationItem теперь NavigationBarItem
@@ski11et25 да так и было, библиотека material3 !
Решение проблемы у кого не будет работать из за material3
удалить все import где прописан material3
в build.gradle заменить .material3 на implementation 'androidx.compose.material:material:1.4.3'
Theme.kt заменить на
import android.app.Activity
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.MaterialTheme
import androidx.compose.material.darkColors
import androidx.compose.material.lightColors
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat
private val DarkColorScheme = darkColors(
primary = Purple80,
secondary = PurpleGrey80,
primaryVariant = Pink80
)
private val LightColorScheme = lightColors(
primary = Purple40,
secondary = PurpleGrey40,
primaryVariant = Pink40
/* Other default colors to override
background = Color(0xFFFFFBFE),
surface = Color(0xFFFFFBFE),
onPrimary = Color.White,
onSecondary = Color.White,
onTertiary = Color.White,
onBackground = Color(0xFF1C1B1F),
onSurface = Color(0xFF1C1B1F),
*/
)
@Composable
fun BottomNavigTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
// Dynamic color is available on Android 12+
dynamicColor: Boolean = true,
content: @Composable () -> Unit,
) {
val colorScheme = when {
darkTheme -> DarkColorScheme
else -> LightColorScheme
}
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
val window = (view.context as Activity).window
window.statusBarColor = colorScheme.primary.toArgb()
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
}
}
MaterialTheme(
colors = colorScheme,
typography = Typography,
content = content
)
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Type.kt заменить на
import androidx.compose.material.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
// Set of Material typography styles to start with
val Typography = Typography(
body1 = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal,
fontSize = 16.sp,
lineHeight = 24.sp,
letterSpacing = 0.5.sp
)
/* Other default text styles to override
titleLarge = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal,
fontSize = 22.sp,
lineHeight = 28.sp,
letterSpacing = 0.sp
),
labelSmall = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Medium,
fontSize = 11.sp,
lineHeight = 16.sp,
letterSpacing = 0.5.sp
)
*/
)