Jetpack Compose 1.8.0-alpha05 から Text
で Autosize がサポートされるようになったので試してみました。
書いているのは 1.8.0-alpha05 時点の内容なので、実際の使用時には最新のドキュメントを確認ください。
使い方
material や material3 の Text
ではまだ使用できず、foundation の BasicText
を使います。
BasicText(
text = text,
autoSize = AutoSize.StepBased(
minFontSize = 10.sp,
maxFontSize = 60.sp,
stepSize = 10.sp
)
)
幅と高さを固定にしていた場合に、収まり切るようにテキストサイズが調整されます。
maxLines = 1
の場合には height を固定にしている場合に高さ方向に対して収まるようにテキストサイズが調整されます。
AutoSize
で設定する引数は以下のとおりです。
引数 | デフォルト値 | 説明 |
---|---|---|
minFontSize | 12sp | 最小のテキストサイズ |
maxFontSize | 112sp | 最大のテキストサイズ |
stepSize | 0.25sp | テキストサイズ調整のステップ |
TextView
の Autosize を使ったことがあれば馴染みのあるものになっています。
ちなみに TextView
であった autoSizePresetSizes
相当のものは現時点では Compose にはありません。
また、Autosize が設定されている時は TextStyle
に設定した fontSize
よりも優先されます。
内部実装
以下の部分でテキストサイズの調整処理があり、最小・最大テキストサイズの中間から拡大・縮小どちらにするのかを決めて入り切るまで繰り返すようになっています。
テキストの調整処理が呼ばれるのは以下の TextAutoSize.performAutoSize
で、
それが呼ばれるのは layoutWithConstraints
の中で、layoutWithConstraints
はレイアウトの measure 時に呼ばれます。