[Android Compose/안드로이드 컴포즈] Use Material Design (Compose 배우기 -3)
2021. 8. 20. 12:20ㆍ└ Compose/Compose 공부하기
Use Material Design
- Compose는 머터리얼 디자인을 원칙으로 지원하도록 빌드되었다.
- 머터리얼 디자인의 모든 요소를 즉시 사용 가능하다.
- Compose로 생성된 프로젝트는 MaterialTheme를 맞춤 설정할 수 프로젝트의 기본 테마를 생성한다. (ui.theme 패키지에서 찾을 수 있음) 따라서 생성된 머터리얼 테마를 래핑 하여 함수에 적용할 수 있다.
@Composable
fun ExampleActivityTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val colors = if (darkTheme) {
DarkColorPalette
} else {
LightColorPalette
}
MaterialTheme(
colors = colors,
typography = Typography,
shapes = Shapes,
content = content
)
}
[생성된 테마(ui.theme)]
위처럼 생성된 머터리얼 테마를 머터리얼 디자인의 세가지 핵심 요소(Color, Typography, shape)를 중심으로 사용방법에 대해 정리해보면
1. Color
- 원하는 색상으로 팔레트를 생성하고 해당 값을 래핑해 테마를 적용할 수 있다.
//다크 모드 팔레트
private val DarkColorPalette = darkColors(
primary = Primary500,
primaryVariant = PrimaryVariant500,
secondary = Secondary500,
)
//라이트 모드 팔레트
private val LightColorPalette = lightColors(
primary = Primary200,
primaryVariant = PrimaryVariant200,
secondary = Secondary200
/* Other default colors to override
background = Color.White,
surface = Color.White,
onPrimary = Color.White,
onSecondary = Color.Black,
onBackground = Color.Black,
onSurface = Color.Black,
*/
)
[팔레트(ui.theme)]
- 선언 할 수 있는 색상의 종류는 아래와 같다.
package androidx.compose.material
fun darkColors(
primary: Color = Color(0xFFBB86FC),
primaryVariant: Color = Color(0xFF3700B3),
secondary: Color = Color(0xFF03DAC6),
secondaryVariant: Color = secondary,
background: Color = Color(0xFF121212),
surface: Color = Color(0xFF121212),
error: Color = Color(0xFFCF6679),
onPrimary: Color = Color.Black,
onSecondary: Color = Color.Black,
onBackground: Color = Color.White,
onSurface: Color = Color.White,
onError: Color = Color.Black
): Colors = Colors(
primary,
primaryVariant,
secondary,
secondaryVariant,
background,
surface,
error,
onPrimary,
onSecondary,
onBackground,
onSurface,
onError,
false
)
fun lightColors(
primary: Color = Color(0xFF6200EE),
primaryVariant: Color = Color(0xFF3700B3),
secondary: Color = Color(0xFF03DAC6),
secondaryVariant: Color = Color(0xFF018786),
background: Color = Color.White,
surface: Color = Color.White,
error: Color = Color(0xFFB00020),
onPrimary: Color = Color.White,
onSecondary: Color = Color.Black,
onBackground: Color = Color.Black,
onSurface: Color = Color.Black,
onError: Color = Color.White
): Colors = Colors(
primary,
primaryVariant,
secondary,
secondaryVariant,
background,
surface,
error,
onPrimary,
onSecondary,
onBackground,
onSurface,
onError,
true
)
사용 방법
- 위에 선언한 팔레트에 정의한 색상을 컴포저블의 color에 사용하면 된다.
- ex) MaterialTheme.colors.primary, MaterialTheme.colors.secondary
- 라이트 모드, 다크 모드에 따라 각각 색상값이 매핑된다
@Composable
fun Button(button: String, onClick: () -> Unit) {
OutlinedButton(
onClick = onClick,
border = BorderStroke(1.dp, Gray20),
shape = RoundedCornerShape(30)
) {
Text(
text = button, color = MaterialTheme.colors.primary, fontSize = 14.sp
)
}
}
2. Typography
- Text 컴포저블에 추가하여 사용할 수 있으며 Typography를 오버 라이딩해 직접 스타일을 설정할 수 있다.
val Typography = Typography(
body1 = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal,
fontSize = 16.sp
)
/* Other default text styles to override
button = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.W500,
fontSize = 14.sp
),
caption = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal,
fontSize = 12.sp
)
*/
)
[Typography(ui.theme)]
- 종류는 아래와 같다
package androidx.compose.material
class Typography internal constructor(
val h1: TextStyle,
val h2: TextStyle,
val h3: TextStyle,
val h4: TextStyle,
val h5: TextStyle,
val h6: TextStyle,
val subtitle1: TextStyle,
val subtitle2: TextStyle,
val body1: TextStyle,
val body2: TextStyle,
val button: TextStyle,
val caption: TextStyle,
val overline: TextStyle
)
사용 방법
@Composable
fun TitleCard(title: String) {
Text(text = title, style = MaterialTheme.typography.h3)
}
@Composable
fun SubTitleCard(subTitle: String) {
Text(text = subTitle, style = MaterialTheme.typography.subtitle1)
}
3. Shape
- small, medium, large 로 각각 RoundedCornerShape을 설정할 수 있다.
val Shapes = Shapes(
small = RoundedCornerShape(4.dp),
medium = RoundedCornerShape(8.dp),
large = RoundedCornerShape(12.dp)
)
[Shapes(ui.theme)]
사용 방법
- 컴포저블의 shape에 사용하면 된다.
@Composable
fun Button(button: String, onClick: () -> Unit) {
OutlinedButton(
onClick = onClick,
border = BorderStroke(1.dp, Gray20),
shape = MaterialTheme.shapes.small
) {
Text(
text = button, color = MaterialTheme.colors.primary, fontSize = 14.sp
)
}
}

'└ Compose > Compose 공부하기' 카테고리의 다른 글
[Android Compose/안드로이드 컴포즈] Lists and animations (Compose 배우기 -4) (0) | 2021.08.20 |
---|---|
[Android Compose/안드로이드 컴포즈] Layouts (Compose 배우기 -2) (0) | 2021.08.19 |
[Android Compose/안드로이드 컴포즈] Composable funtions (Compose 배우기 -1) (0) | 2021.08.19 |