Метод copy
Метод copy класса
ColorScheme
оставляет прежние значения,
кроме переданных параметров.
Чаще меняют primary, onPrimary,
background или surface.
Каждый аргумент - значение класса
Color.
Синтаксис
val accent = scheme.copy(primary = Color.Red)
Параметры
| Параметр | Описание |
|---|---|
primary |
Новый акцентный цвет. Необязательный параметр. |
onPrimary |
Цвет контента поверх primary. Необязательный параметр. |
background |
Фон экрана. Необязательный параметр. |
surface |
Фон карточек и панелей. Необязательный параметр. |
Пример
Давайте сменим только primary в текущей теме:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.ui.graphics.Color
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
val scheme = MaterialTheme.colorScheme.copy(
primary = Color(0xFF6A1B9A),
)
MaterialTheme(colorScheme = scheme) {
Text(
text = "abcde",
color = MaterialTheme.colorScheme.primary,
)
}
}
}
}
}
На экране текст "abcde" станет фиолетовым primary,
фон и surface останутся как в исходной теме.
Пример
Давайте вместе поменяем surface и onPrimary:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
val scheme = MaterialTheme.colorScheme.copy(
primary = Color(0xFF0277BD),
onPrimary = Color.White,
surface = Color(0xFFE1F5FE),
)
MaterialTheme(colorScheme = scheme) {
Box(
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colorScheme.surface),
) {
Button(onClick = { }) {
Text(text = "12345")
}
}
}
}
}
}
}
На экране фон станет голубым surface, кнопка получит синий primary и белый текст onPrimary.
Смотрите также
-
класс
ColorScheme,
у которого вызывают copy -
функция
lightColorScheme,
которая создаёт схему с нуля -
класс
Color,
которым задают аргументы copy -
функция
MaterialTheme,
которой передают результат copy