LoginSignup
16
12

More than 3 years have passed since last update.

[Android]TextView の文字の大きさを自動的に調整する(Autosizing TextViews)

Posted at

はじめに

Android の TextView では View サイズに応じて、
文字の大きさ(TextSize)を自動的に調整する機能が実装されています。
その機能について調べたので、簡単に使い方をまとめたいと思います。

View サイズに応じて TextSize を自動的に調整する

次のように TextView の autoSizeTextType を uniform に設定すると、
TextView の View サイズに応じて TextSize が自動的に調整されるようになります。

activity_main.xml
        <TextView
            android:id="@+id/size_type_uniform_view"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:text="Uniform"
            android:background="#aaffaa"
            app:autoSizeTextType="uniform"/>

次のような感じで View サイズの変化に応じて TextSize を自動的に調整してくれます。

ezgif.com-rotate.gif

TextSize を大きくするステップ数の調整をする

次のように autoSizeStepGranularity を設定すると、
TextSize を大きくするステップ数の調整ができます。

activity_main.xml
        <TextView
            android:id="@+id/granularity_view"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:text="Granularity"
            android:background="#aaffaa"
            app:autoSizeTextType="uniform"
            app:autoSizeStepGranularity="10dp"/>

次のような感じで TextSize を徐々に大きくするのではなく段階的に大きくしてくれます。

ezgif.com-rotate (1).gif

TextSize の最小値と最大値を調整する

次のように autoSizeMinTextSize と autoSizeMaxTextSize を設定すると、
View サイズに応じて調整される TextSize の最小値と最大値を調整できます。

activity_main.xml
        <TextView
            android:id="@+id/min_max_view"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:text="MinMax"
            android:background="#ffaaaa"
            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="25dp"
            app:autoSizeMaxTextSize="75dp"/>

次のような感じで、ある View サイズよりも小さくなったら TextSize が小さくならず
ある View サイズよりも大きくなったら TextSize を大きくしないようにできます。

5dd9612db1b05307488279.gif

プリセットで ステップ数、最小値、最大値を定義する

autoSizeStepGranularity や autoSizeMinTextSize 、autoSizeMaxTextSize を
設定すればTextSize をどのように大きさを調整するか大まかに設定できました。

もっと詳細に調整したい場合は autoSizePresetSizes を利用します。
次のような配列(プリセット)を渡すと、TextSize をそのステップ数、最小値、最大値で調整してくれます。

arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="autosize_text_sizes">
        <item>10dp</item>
        <item>50dp</item>
        <item>100dp</item>
    </array>
</resources>
activity_main.xml
        <TextView
            android:id="@+id/size_preset_sizes_view"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:text="PresetSizes"
            android:background="#aaaaff"
            app:autoSizeTextType="uniform"
            app:autoSizePresetSizes="@array/autosize_text_sizes"/>

次のような感じでプリセットのステップ数、最小値、最大値となるよう TextSize を調整してくれます。

5dd966f85c678518635109.gif

おわりに

TextView の文字の大きさを自動的に調整したいときは、
次の attributes にて どのように自動的に調整するか設定できる。

attributes 説明
autoSizeTextType uniform であれば自動的に調整する。
none であれば自動的に調整しない。
autoSizeStepGranularity 自動的に調整する際の TextSize を大きくするステップ数を設定する。
autoSizeMinTextSize 自動的に調整する際の TextSize の最小値を設定する。
autoSizeMaxTextSize 自動的に調整する際の TextSize の最大値を設定する。
app:autoSizePresetSizes 自動的に調整する際の プリセット を設定する。
プリセットに定義した内容で ステップ数、最小値、最大値が決まる

参考文献

16
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12