課題
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
などの関数も用意されてるようなので合わせて使っていきたい。