LibCode»Блог

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

SQL | PHP | Kotlin | Python | C++ | JavaScript

Kotlin: Как уменьшить расстояние между строками в тексте

В Jetpack Compose есть несколько способов уменьшить расстояние между строками в тексте:

Через параметр lineSpacing в TextStyle:
Text(
    text = "Ваш текст",
    style = TextStyle(
        lineSpacing = 1.2f // значение меньше 1 уменьшит расстояние
    )
)

Через lineHeight в TextStyle:
Text(
    text = "Ваш текст",
    style = TextStyle(
        lineHeight = 20.sp // задайте конкретное значение в sp
    )
)

Для Column (если речь про расстояние между элементами):
Column(
    verticalArrangement = Arrangement.spacedBy(8.dp) // задайте нужное расстояние
) {
    Text("Строка 1")
    Text("Строка 2")
}

Для LazyColumn или LazyRow:
LazyColumn(
    verticalArrangement = Arrangement.spacedBy(8.dp)
) {
    items(itemsList) { item ->
        Text(item.text)
    }
}

Для нескольких Text в Column:
Column {
    Text("Первая строка")
    Spacer(modifier = Modifier.height(4.dp)) // задайте нужное значение
   
...

Kotlin: Разница между app.R и com.google.android.material.R

Разработчики Android нередко сталкиваются с путаницей относительно использования различных версий класса R, особенно когда речь идет о доступе к ресурсам своего приложения и сторонних библиотек. Эта статья поможет разобраться в разнице между app.R и com.google.android.material.R, а также научит правильно обращаться к нужным ресурсам.

Что такое классы R?


Класс R представляет собой специальную структуру, автоматически создаваемую Android Studio во время процесса сборки проекта. Он служит контейнером ссылок на ресурсы вашего приложения (изображения, цвета, стили, макеты и т.д.). Каждый ресурс автоматически получает уникальный числовой идентификатор, хранящийся в соответствующих полях класса R.

Классы R бывают двух типов:
  • Ваш собственный класс R, называемый app.R, соответствует ресурсам вашего проекта.
  • Класс R сторонней библиотеки, обозначаемый именем пакета библиотеки (например, com.google.android.material.R), содержит ссылки на ресурсы конкретной внешней библиотеки.

app.R


Что это?Это...

Kotlin: Различия между stringResource() и getString()

При разработке приложений на Android с использованием Jetpack Compose и стандартных подходов на основе Activity/Fragments вы можете столкнуться с двумя разными способами получения строковых ресурсов: функцией stringResource() и методом getString(). Оба способа служат схожей цели — получают строку из ресурсов проекта, однако имеют разное назначение и области применения.

Функционал и различия



stringResource()
  • Назначение: Используется в рамках композиции Composable-функций Jetpack Compose.
  • Где применяется: Только внутри функций с аннотацией @Composable.
  • Формат: Выглядит как простая функция, принимающая ID ресурса: stringResource(R.string.your_string_id).
  • Импорт: Необходимо подключить следующий импорт:
    import androidx.compose.ui.res.stringResource

Пример использования:
@Composable
fun MyScreen() {
    Text(text = stringResource(R.string.welcome_message))
}

getString()
  • Назначение: Применяется вне контекста Compose-композиций, например, в обычных Activity, Fragment
...

Kotlin: onSuccess и onError

В Kotlin (особенно при работе с корутинами и асинхронными операциями) часто встречаются конструкции onSuccess и onError. Они служат для обработки результатов асинхронных операций — как успешных, так и ошибочных.

Что это такое?


Это лямбда‑функции (callback-обработчики), которые:
  • onSuccess — вызывается при успешном завершении операции;
  • onError — вызывается при возникновении ошибки.

Они позволяют отделить логику обработки результата от самого выполнения операции.

Где применяются


Чаще всего встречаются в:
  • сетевых запросах (Retrofit, Ktor);
  • работе с БД (Room, SQLDelight);
  • корутинах (async, await);
  • RxJava/RxKotlin;
  • библиотеках для работы с файлами/IO.

Базовый синтаксис
someAsyncOperation(
    onSuccess = { result ->
        // Обработка успешного результата
    },
    onError = { exception ->
        // Обработка ошибки
    }
)

Практические примеры



Сетевой запрос (Retrofit)
apiService.getUser(userId)
    .enqueue(object : Callback<User> {
        override fun
...