<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:textAppearance="@style/TextAppearance.Charcoal.Regular.20"
android:textColor="?attr/colorCharcoalText1" />
<Button
style="@style/Widget.Charcoal.Button.Default.M"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK" />CharcoalM3Theme を適用すると、素の Material 3 コンポーネントが Charcoal の配色・文字スタイルで描かれる。
ColorScheme / Typography で表現できない差分は CharcoalXxxDefaults を渡して補う。
CharcoalM3Theme {
Surface {
Column {
Text(
text = "Hello",
color = CharcoalTheme.colorToken.text1,
style = CharcoalTheme.typography.bold14,
)
Checkbox(
checked = checked,
onCheckedChange = { checked = it },
colors = CharcoalCheckboxDefaults.colors(),
)
// M3 コンポーネントで表現できないものは Charcoal の専用コンポーネントを提供する
CharcoalButton(
onClick = { },
colors = CharcoalButtonDefaults.primaryButtonColors(),
) {
Text("OK")
}
}
}
}- タイポグラフィは M3 のロールにも割り当てているため、
styleを省略してもロールに応じた Charcoal のスタイルが当たる。ロールで表現できないものは配色と同じく Defaults や専用 コンポーネント側で供給する(例:CharcoalButtonのラベルは bold14 固定) CharcoalM3Themeと Material 2 版のCharcoalThemeは排他。どちらか一方だけを適用する- Compose の依存は利用側で宣言する(Compose BOM と
androidx.compose.material3) - 全コンポーネントの実装例は
catalogの Compose Catalog (Material 3) で確認できる
CharcoalTheme を適用すると、Charcoal のカラートークンとタイポグラフィが CompositionLocal で供給される。
Charcoal 固有の見た目が必要なものだけ Charcoal の専用コンポーネントを用意している。
CharcoalTheme {
Surface {
Column {
Text(
text = "Hello",
color = CharcoalTheme.colorToken.text1,
style = CharcoalTheme.typography.regular16,
)
CharcoalRadioButton(
selected = selected,
onClick = { selected = true },
)
CharcoalDivider()
}
}
}Material 3 版への移行を進めているため、新規は Material 3 版を推奨する。
repositories {
mavenCentral()
}ext {
charcoal_version = "1.1.0"
}
dependencies {
// Android View
implementation "net.pixiv.charcoal:charcoal-android-view:$charcoal_version"
// Compose(Experimental)
implementation "net.pixiv.charcoal:charcoal-compose:$charcoal_version"
}- minSdk 23+
- compileSdk
charcoal-android-view: 35+charcoal-compose: 37+
charcoal-compose と catalog は Roborazzi で Composable Preview の
スクリーンショットを生成・比較できます。対象は各モジュール内のすべての @Preview(private を含む)で、
テストコードは自動生成されます。
# スクリーンショットを生成する(charcoal-android-compose/build/outputs/roborazzi/ に出力)
./gradlew :charcoal-android-compose:recordRoborazziDebug
# 前回の生成結果と比較する(差分画像は *_compare.png として出力)
./gradlew :charcoal-android-compose:compareRoborazziDebug
# 差分があればテストを失敗させる
./gradlew :charcoal-android-compose:verifyRoborazziDebugcatalog の Preview を対象にする場合は、タスクのモジュール名を :catalog に置き換えて実行してください
(出力先は catalog/build/outputs/roborazzi/)。
基準画像はリポジトリにコミットしていません。変更前後を比較するときは、変更前のコミットで record してから
変更後のコミットに切り替えて compare を実行してください(出力先は build/ 配下なので切り替えても残ります)。
通常の testDebugUnitTest ではスクリーンショットテストは実行されません。