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?
Wie verwende ich die Farbressource direkt in Jetpack Compose?
Sweta Jain
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.
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)