Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

テキストサイズを画面サイズに合わせて自動的に変化させる

こんにちは!Sansan事業部 プロダクト開発部のふるしんです。

私は大阪のオフィスでSansanプロダクトのAndroidアプリの開発に従事しています。

play.google.com

皆さん、Androidで画面をデザインしてる時にこんなことを思ったことはありませんか?

Pixel3 XLとか画面サイズが大きい時はTextViewのTextSizeは大きくしたいけど、HT-03Aとか画面サイズが小さい時はTextSizeも小さくしたい

画面サイズによって文字サイズが自動的に変わってくれたら、ユーザビリティ上がりますよね!(きっと)

ということで、今回はその方法をお伝えします。


デフォルト値をセットする

android:autoSizeTextTypeでは noneuniform の2つがセットできます。

none(AUTO_SIZE_TEXT_TYPE_NONE) にすると自動サイズ設定機能がオフになります。

uniform(AUTO_SIZE_TEXT_TYPE_UNIFORM)にすると横軸と縦軸で均一に拡大縮小します。

サイズの最小値/最大値をセットする

最小サイズは android:autoSizeMinTextSize で、最大サイズは android:autoSizeMaxTextSize でセットできます。

「画面サイズに合わせて自動的に変化はするけど、これ以上小さくしたくない!大きくしたくない!」という時にセットします。

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="12sp"
    android:autoSizeMaxTextSize="100sp"/>

文字サイズを自動的に変化させる「変化の単位」をセットする

android:autoSizeStepGranularity をセットすることで、サイズの粒度をセットできます。

文字サイズの変化を1sp単位で変化させるのか、4sp単位で変化させるのか、といった事ができます。

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="12sp"
    android:autoSizeMaxTextSize="100sp"
    android:autoSizeStepGranularity="2sp" />

変化するサイズのリストを自分で作成する

サイズのリストをリソースとして持って、android:autoSizePresetSizes にリストを指定することで独自のサイズを指定することも可能です。

「この時はこのサイズだけどこの時はこのサイズ…とか、微妙なサイズの定義を自分で作りたい!」というときに有効かと思います。

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizePresetSizes="@array/autosize_text_sizes" />
<resources>
  <array name="autosize_text_sizes">
    <item>10sp</item>
    <item>12sp</item>
    <item>20sp</item>
    <item>40sp</item>
    <item>100sp</item>
  </array>
</resources>

まとめ

今回は「Androidあるある」な画面サイズ&文字サイズ問題に関して取り上げました。

画面サイズを考慮しながら文字の長さを考えた結果、伝えたいことが伝わらない文言になってしまっては本末転倒です。

そんな問題を解決する手助けとなれば幸いです。

公式ドキュメントはこちら

developer.android.com

P.S.

Sansanでは一緒に働く仲間を募集しています!

私は大阪におりますので、興味が湧きましたらぜひお声がけください!

hrmos.co

hrmos.co

© Sansan, Inc.