前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Android : Compose : TextStyleを効率的に定義する

課題

TextStyleを使って文字コードやフォントサイズ、色などを指定できるが、画面ごとに微妙に変わることがあり、その度にスタイルを作っていくと数が増え過ぎてしまう。どうすればよいか。

回答

TextStyle.copy()を使おう。

実践例

メインで使うテキストカラーをPrimary、フォントファミリーをNotoフォント、fontWeight = FontWeight.Normarlとしてまずベースを作ることにする(定義済みである前提)。

val NotoPrimaryNormal = TextStyle(
    fontFamily = NotoSansJpFamily,
    fontWeight = FontWeight.Normal,
    color = TextPrimary,
    fontSize = 12.sp
)

次にBoldも用意しておこう。copy を使うことでfontWeightだけ部分的に変更できある。

val NotoPrimaryBold = NotoPrimaryNormal.copy(fontWeight = FontWeight.Bold)

あとタイトルはよく使うのであらかじめ定数化しておこう。ということでNotoPrimaryBold をベースに文字サイズだけ変更

val PrimaryTitle = NotoPrimaryBold.copy(fontSize = 15.sp)

ここの画面のテキストだけサイズが違う、といった場合は変数化はせずにちょこっと修正して使う。 これで余計なスタイル定義の増殖を防ぐことができる。

Text(style = NotoPrimaryNormal.copy(fontSize = 14.sp))

まとめ

上流が変更されると下流で影響を受けてしまうのでそこだけ注意。
TextStyleの効率的な書き方で悩んでいたのでcopy()使えるやんということに気づいたときは感動した。
てかデータクラスとかもだけどcopy()超便利。

他にもTextStyleには plus とか merge などの関数も用意されてるようなので合わせて使っていきたい。