ГлавнаяБлогErrors / FixesПочему я получаю эту ошибку предварительного просмотра Android Jetpack Compose
Errors / Fixes5 сентября 2026 г.3 мин

Почему я получаю эту ошибку предварительного просмотра Android Jetpack Compose

Why do I get this Android Jetpack Compose Preview error ## Введение При переходе на Jetpack Compose вы можете столкнуться с ошибкой при попытке открыть превью композиции. В этой...

Почему я получаю эту ошибку предварительного просмотра Android Jetpack Compose
Почему я получаю эту ошибку предварительного просмотра Android Jetpack Compose - image 2

Why do I get this Android Jetpack Compose Preview error

Введение

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

Описание проблемы

Вы добавили Jetpack Compose в старый проект и столкнулись с ошибкой ResourceResolutionException при попытке открыть превью компонента HourlyItem. Ошибка связана с попыткой загрузки ресурса Window_backgroundDimAmount.

Пример кода

@Composable
private fun HourlyItem(
    modifier: Modifier = Modifier,
    iconResource: Int,
    time: String,
    temperature: Int,
) {
    Row(modifier = Modifier.fillMaxWidth()) {
        Icon(
            painter = painterResource(iconResource),
            contentDescription = null,
            modifier = Modifier.size(36.dp),
            tint = MaterialTheme.colorScheme.primary,
        )
        Text(text = time)
        Text(text = stringResource(R.string.temp, temperature))
    }
}

@Preview
@Composable
private fun HourlyItemPreview() {
    HourlyItem(
        iconResource = R.drawable.ic_weather_clear_day,
        time = "12pm",
        temperature = 78,
    )
}

Анализ ошибки

Ошибка ResourceResolutionException указывает на проблему с загрузкой ресурса. В данном случае, компилятор не может найти ресурс Window_backgroundDimAmount. Это может быть связано с несколькими причинами:

  1. Неправильное определение ресурсов.
  2. Проблемы с конфигурацией проекта.
  3. Неправильное использование API Jetpack Compose.

Решение проблемы

Проверка ресурсов

Убедитесь, что ресурсы определены правильно в вашем проекте. Если ресурс Window_backgroundDimAmount является системным, он должен быть доступен без дополнительных действий. Однако если это пользовательский ресурс, убедитесь, что он существует и корректно определен.

Пример проверки ресурсов

  1. Откройте папку res вашего проекта.
  2. Перейдите в values и проверьте наличие файла styles.xml.
  3. Убедитесь, что ресурс определен там или в другом месте.

Обновление конфигурации проекта

Проверьте конфигурацию вашего проекта и убедитесь, что все зависимости и плагины установлены правильно.

Пример конфигурации build.gradle

buildscript {
    ext.kotlin_version = "2.4.10"
    ext.hilt_version = "2.60.1"
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:9.4.0'
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
        classpath("org.jetbrains.kotlin.plugin.compose:org.jetbrains.kotlin.plugin.compose.gradle.plugin:$kotlin_version")
    }
}

plugins {
    id 'com.google.devtools.ksp' version '2.3.4'
    apply false
}

apply plugin: 'com.android.application'
apply plugin: 'com.google.dagger.hilt.android'
apply plugin: 'com.google.devtools.ksp'
apply plugin: 'org.jetbrains.kotlin.plugin.compose'

android {
    buildFeatures {
        viewBinding true
        buildConfig = true
        compose = true
    }
}

Использование painterResource вместо iconResource

Если ресурс действительно не найден, попробуйте использовать painterResource вместо iconResource.

Пример кода

@Composable
private fun HourlyItem(
    modifier: Modifier = Modifier,
    painter: Painter,
    time: String,
    temperature: Int,
) {
    Row(modifier = Modifier.fillMaxWidth()) {
        Icon(
            painter = painter,
            contentDescription = null,
            modifier = Modifier.size(36.dp),
            tint = MaterialTheme.colorScheme.primary,
        )
        Text(text = time)
        Text(text = stringResource(R.string.temp, temperature))
    }
}

@Preview
@Composable
private fun HourlyItemPreview() {
    val painter = painterResource(id = R.drawable.ic_weather_clear_day)
    HourlyItem(
        painter = painter,
        time = "12pm",
        temperature = 78,
    )
}

Практические советы

  1. Проверьте версию Kotlin: Убедитесь, что вы используете актуальную версию Kotlin, так как некоторые проблемы могут быть связаны с совместимостью.
  2. Обновите зависимости: Убедитесь, что все зависимости обновлены до последних версий.
  3. Используйте инструменты для анализа ошибок: Используйте инструменты для анализа ошибок, такие как Kotlin Compiler Plugin и Hilt Compiler, чтобы выявить возможные проблемы.

Заключение

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