如何在 Jetpack Compose 中直接使用 Color 资源?
How do I use Color resource directly in Jetpack Compose?
我想直接使用 colors.xml class 中定义的自定义颜色,而不使用 Material 主题颜色或 Jetpack 提供的默认主题。有什么简单的方法可以做到吗?
您可以使用 colorResource()
加载颜色资源。
Text(
text = "Hello World",
color = colorResource(R.color.purple_200)
)
要在 Jetpack Compose 中使用颜色,请使用推荐的创建包 ui.theme 在 com.. 如果您正在创建空的撰写项目,它可能会默认存在。现在创建 Color.kt 和 Theme.kt kotlin 文件,如果它们不存在于您的项目中。
在Color.kt中添加你需要的颜色
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)
Here is ready to use a Material Color template made by me
有 3 种常见的颜色使用方式
方法一:直接使用颜色
import com.<domain_name>.<app_name>.ui.theme.*
Text(text = "Hello ", color = Flower)
方法 2: 覆盖默认的 MaterialTheme 颜色
现在,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()
}
方法三:自定义主题(推荐方法)
Text(text = "Hello ", color = AppNameTheme.colors.customColor)
我想直接使用 colors.xml class 中定义的自定义颜色,而不使用 Material 主题颜色或 Jetpack 提供的默认主题。有什么简单的方法可以做到吗?
您可以使用 colorResource()
加载颜色资源。
Text(
text = "Hello World",
color = colorResource(R.color.purple_200)
)
要在 Jetpack Compose 中使用颜色,请使用推荐的创建包 ui.theme 在 com.
在Color.kt中添加你需要的颜色
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)
Here is ready to use a Material Color template made by me
有 3 种常见的颜色使用方式
方法一:直接使用颜色
import com.<domain_name>.<app_name>.ui.theme.*
Text(text = "Hello ", color = Flower)
方法 2: 覆盖默认的 MaterialTheme 颜色
现在,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()
}
方法三:自定义主题(推荐方法)
Text(text = "Hello ", color = AppNameTheme.colors.customColor)