#android #android-jetpack-compose
Вопрос:
Я пытаюсь создать цвет, используя значения RGB, но получаю следующую ошибку. Я не могу найти для этого решение.
Color(148f, 148f, 148f, 1f)
Ниже приведена ошибка, которую я получаю:
java.lang.IllegalArgumentException: red = 148.0, green = 148.0, blue = 148.0, alpha = 1.0 outside the range for sRGB IEC61966-2.1 (id=0, model=Rgb)
at androidx.compose.ui.graphics.ColorKt.Color(Color.kt:405)
at androidx.compose.ui.graphics.ColorKt.Color$default(Color.kt:398)
at com.template.app.util.toast.CustomToast$successView$1$1.invoke(CustomToast.kt:86)
at com.template.app.util.toast.CustomToast$successView$1$1.invoke(CustomToast.kt:83)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.ui.platform.ComposeView.Content(ComposeView.android.kt:384)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:228)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:227)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:148)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:114)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:113)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:106)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:162)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:161)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:161)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:144)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:3330)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2577)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2573)
at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(SnapshotState.kt:540)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2566)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2517)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:476)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:727)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:432)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:144)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:135)
Я проверил код цветового класса и обнаружил, что мне нужно указать ColorSpace
, но я не могу найти подходящий ColorSpace
для моего требования.
Ответ №1:
Конструктор, который вы используете, ожидает, что он будет находиться в диапазоне 0..1
.
Int
Вместо этого используйте значения:
Color(148, 148, 148, 255)
Комментарии:
1. Ух ты!! Это сработало идеально. Я попробовал это решение, но меня приняли
1
за альфу. Так что весь фокус в том, чтобы сойти255
за альфу.
Ответ №2:
Вам нужно использовать ColorSpaces.Srgb
для указания значений в диапазоне 0..255. Здесь в документации есть очень хорошая таблица: https://developer.android.google.cn/reference/kotlin/androidx/compose/ui/graphics/Color
Так что в принципе вы должны использовать его так
Color(red = 148f, green = 148f, blue = 148f, alpha = 1f, ColorSpace.get(ColorSpaces.Srgb))
Комментарии:
1. Я пытался использовать это, но я также получаю ту же ошибку
ColorSpaces.Srgb
. Я получаю туjava.lang.IllegalArgumentException: red = 148.0, green = 148.0, blue = 148.0, alpha = 1.0 outside the range for sRGB IEC61966-2.1 (id=0, model=Rgb)
же ошибку, если мы ее не указываемColorSpaces
.2. Вы уверены, что правильно используете цветовое пространство? Я обновил ответ образцом
3. Вы пробовали это в своем коде? Потому что, если я применю
ColorSpace.get(ColorSpaces.Srgb)
это, я получу ошибку, котораяColorSpace.get
не найдена вandroidx.compose.ui.graphics.colorspace.ColorSpace
4. Я использовал это примерно 2 недели назад, и это сработало, но версия с Ints кажется еще проще 🙂