tsurutanのつぶやき

備忘録としてつぶやきます

Android ローカライゼーションでテキスト幅を揃える

f:id:tsurutan:20161010111900p:plain

Androidは多くの言語が搭載されており、開発者にとってアプリケーションの多言語化は切っても切れない関係です。

単言語化で最も気をつけなければならないことは、あるフレーズを別の言語に置き換えたときに、テキストの長さが変わってしまいデザインが崩れてしまうことです。

今回は、このようなケースに備えて、自動的に文字サイズを変えて一定の幅にテキストを抑えてくれるAutofitHelperというライブラリーについて紹介したいと思います。

使い方

使い方は至ってシンプルです。

文字の大きさを自動で変えたいTextView

AutofitHelper.create(textView);

このようにAutfitHelper.createの引数に渡すだけです。

ただし、渡すTextViewにはmaxLinesなどを指定し、行数を制限してください。

またxmlからも指定することができ

<me.grantland.widget.AutofitLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        />
</me.grantland.widget.AutofitLayout>

このように、変化させたいViewをAutofitLayoutでラップするか

<me.grantland.widget.AutofitTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:maxLines="2"
    android:textSize="40sp"
    autofit:minTextSize="16sp"
    />

AutofitTextViewAutofitButtonというウィジェットを使うことができます。

特にCustomしたTextViewを使ってないのであれば、提供されているウィジェットを使うことをおすすめします。

f:id:tsurutan:20161010111509g:plain

また、English(XA)かロシア語が他の言語と比べてフレーズが長いと言われているので多言語化をテストするときはこれらを使うのがおすすめです。

ちなみにEnglish(XA)とは、標準的な英語を三割ほど文字数を増やして長くしたものです。

どうやって使うの?

おなじみアプリケーションレベルのbuild.gradle

dependencies {
    compile 'me.grantland:autofittextview:0.2.+'
}

と記述するだけです。簡単ですね!

問題点

AutofitHelperには現在のバージョンでは問題点があり、TextViewに.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0)を指定して、drawableを描画すると文字の幅を見誤ってしまいうまく調整することができません。

この対策として、Libraryをローカルに引っ張ってきてAutofitHelper.javaの98行目を

int targetWidth = view.getWidth() - view.getPaddingLeft() - view.getPaddingRight();

から

int targetWidth = view.getWidth() - view.getCompoundPaddingLeft() - view.getCompoundPaddingRight();

に変更しましょう。

それとも、現在修正されたプルリクが出されているのでそれをjitpackで使うか、マージされるか待った方が良いかもしれませんね。

オススメの記事

www.tsurutan.com

www.tsurutan.com

www.tsurutan.com

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)