Составной текст Android прерывает предварительный просмотр, когда он получает параметр цвета. Есть ли обходной путь?

#android #kotlin #android-gradle-plugin #android-jetpack-compose

Вопрос:

В любой версии Android Studio до версии Bumblebee 2011.1.1 Canary 11 следующее представление не отображается и фактически нарушает просмотрщик неожиданными способами.

 @Preview
@Composable
fun ColoredText(color: Color = Color.Red) = Text("text")
 

Стабильная версия Arctic Fox выдает метод неоснователя, в то время как канарейка выдает предупреждение о том, что она не может найти представление. Как я могу заставить предварительный просмотр снова работать?

Ответ №1:

С @Preview Composables основным ограничением заключается в том, что функции предварительного просмотра, которые можно компоновать, не должны принимать никаких параметров.

ColoredText Ваш составляемый принимает color: Color = Color.Red в качестве параметра, следовательно, не отображается. Вы также увидите @Preview Annotation , что ваш код выделен красным цветом.

Для предварительного просмотра кода вы можете сделать предварительный просмотр составным именем ColoredTextPreview() , которое не принимает никаких параметров. Используйте это для предварительного просмотра ColoredText() и передачи параметра цвета

 @Preview
@Composable
//preview doesn't accept parameters
fun ColoredTextPreview() = ColoredText(Color.Red)

@Composable
//create a 2nd non-preview composable that accepts parameters
fun ColoredText(color1: Color = Color.Red) {
    Text(
        text = "text",
        color = color1,
        modifier = Modifier.fillMaxWidth()
    )
}
 

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

 import androidx.compose.ui.graphics.Color
 

Спасибо,

Комментарии:

1. Это хороший обходной путь, я просто отмечу, что параметр IDE позволяет @Preview принимать функцию, имеющую параметры, если они имеют значения по умолчанию, поэтому выделение красной ошибки не происходит. И, кроме того, есть еще @PreviewParameter кое-что, заслуживающее упоминания, но выходящее за рамки данного вопроса. Тем не менее спасибо за подсказку, я отмечу, как ответил.