Wie verwende ich die Farbressource direkt in Jetpack Compose?

Lesezeit: 2 Minuten

Benutzeravatar von Sweta Jain
Sweta Jain

Ich möchte benutzerdefinierte Farben, die in der Klasse „colors.xml“ definiert sind, direkt verwenden, ohne die Material-Designfarben oder das vom Jetpack bereitgestellte Standarddesign zu verwenden. Gibt es eine einfache Möglichkeit, dies zu tun?

Sie können verwenden colorResource() wodurch eine Farbressource geladen wird.

Text(
    text = "Hello World",
    color = colorResource(R.color.purple_200)
)

  • Das funktioniert auf jeden Fall, aber ich denke, die Idee besteht darin, Ihre Farben in Ihrer Colors.kt-Datei zu haben, und ein Teil des Vorteils der Migration zu Jetpack Compose besteht darin, dass wir das Projekt von dem elenden Ding befreien können, das wir XML nennen. Lol, viel Spaß beim Codieren!

    – Joshua King

    10. Juni 2021 um 14:58

  • @JoshuaKing … die colorResource(…)-Idee funktioniert aufgrund dieser „magischen Zahlen“, die in der statischen Codeanalyse vorkommen, gut.

    – Marlon López

    15. August 2022 um 21:08 Uhr

  • Das hat bei mir funktioniert. Ich musste nur hinzufügen import com.mypackagename.R manuell.

    – Rumit Patel

    12. Januar um 13:11 Uhr

Um Farbe in Jetpack Compose zu verwenden, verwenden Sie die empfohlene Erstellung eines Pakets ui.theme In com.. Dies ist wahrscheinlich standardmäßig vorhanden, wenn Sie ein leeres Compose-Projekt erstellen. Jetzt erstellen Farbe.kt Und Theme.kt Kotlin-Dateien, wenn sie in Ihrem Projekt nicht vorhanden sind.

In Farbe.kt Fügen Sie die gewünschten Farben hinzu

package com.<domain_name>.<app_name>.ui.theme

import androidx.compose.ui.graphics.Color

val Purple200 = Color(0xFFBB86FC)
val Purple500 = Color(0xFF6200EE)
val Purple700 = Color(0xFF3700B3)
val Teal200 = Color(0xFF03DAC5)
val Flower = Color(0xFF4CAF50)
val Deer = Color(0xFFFF5722)
val Mango = Color(0xFFFF9800)
val AppbarColor = Color(0xFF2196F3)

Hier können Sie eine von mir erstellte Materialfarbenvorlage verwenden

Es gibt drei gängige Möglichkeiten, Farben zu verwenden

Methode 1: Farbe direkt verwenden

import com.<domain_name>.<app_name>.ui.theme.*

Text(text = "Hello ", color = Flower)

Methode 2: Überschreiben Sie die Standardfarben von MaterialTheme

Jetzt in, Theme.kt

private val DarkColorPalette = darkColors(
    primary = Purple200,
    primaryVariant = Purple700,
    secondary = Teal200,
    onBackground = Flower //Custom color
)

private val LightColorPalette = lightColors(
    primary = Purple500,
    primaryVariant = Purple700,
    secondary = Teal200,
    onBackground = Deer //Custom color

    /* Other default colors to override
    background = Color.White,
    surface = Color.White,
    onPrimary = Color.White,
    onSecondary = Color.Black,
    onBackground = Color.Black,
    onSurface = Color.Black,
    */
)

@Composable
fun NotepadTheme(darkTheme: Boolean = isSystemInDarkTheme(), 
content:@Composable() () -> Unit) {
    val colors = if (darkTheme) {
        DarkColorPalette
    } else {
        LightColorPalette
    }

    MaterialTheme(
        colors = colors,
        typography = Typography,
        shapes = Shapes,
        content = content
    )
}

MainActivity.kt

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ColorApp()
        }
    }
}

@Composable
fun ColorApp() {
    ColorTheme {
        Surface(modifier = Modifier.fillMaxSize(),
            color = MaterialTheme.colors.background) {
            Greeting("Android")
        }
    }
}

@Composable
fun Greeting(name: String) {
    Text(text = "Hello $name!", color = MaterialTheme.colors.onBackground) //Using color
}

@Preview(
    showBackground = true, name = "Light mode",
    uiMode = Configuration.UI_MODE_NIGHT_NO or 
    Configuration.UI_MODE_TYPE_NORMAL
    )
@Preview(
    showBackground = true, name = "Night mode",
    uiMode = Configuration.UI_MODE_NIGHT_YES or 
    Configuration.UI_MODE_TYPE_NORMAL
)
@Composable
fun DefaultPreview() {
    ColorApp()
}

Methode 3: Benutzerdefiniertes Thema (Empfohlene Methode)

Text(text = "Hello ", color = AppNameTheme.colors.customColor)

1451790cookie-checkWie verwende ich die Farbressource direkt in Jetpack Compose?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy