TextViewでの1行表示の制御
iOSではUILabelに相当するであるAndroidのTextViewの行表示なのですが、
今日おどろきましたので共有することにします。
前提はAPI通信でTextに表示する文字列を取得後にUIKitにsetTextさせてLabelやらTextViewやらに
文字を表示させる状況です。
固定文字列だったらこんな制御の話になるはずがありませんからね!
iOSでのUILabelについて
デフォルトだとUILabelは2行以上になるけど、UILabelの高さが1行分しか表示できないサイズであれば、
文字列として表示されるのは「1行」で文字切れ部分は「xxxx...」と省略されます。
AndroidでのTextViewについて
デフォルトだと2行以上の文字数であれば、TextViewの表示のされ方は
文字列として表示されるのは「1行」で文字切れ部分は「xxxx」と表示されていたのである。
そこでディくれクターからiOSの仕様に合わせてくれとのことだったので
プログラムで「...」を表示させるのが今回の議題であった。
実装方法について
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@drawable/RED" />
という風に android:singleLineをtrueに設定して、
eandroid:ellipsizeをendと設定すれば「xxxx...」を実現できた。
ellipsizeのオプションについて
ellipsizeのオプションについては下記の表の通りの制御となります。
| Value | TextViewのデフォルト値 | 動作 |
|---|---|---|
| none | ○ | 何もしない |
| start | ...xxxx | |
| middle | xxx...xxx | |
| end | xxxxxx... |
スマホアプリの開発現場だとだいたいの仕様はiOSに合わせるかAndroidに合わせるかなので、
両OSでどのように挙動が変わるのかを事前に知っておくとスマートな実装が実現できますよね。
そういう意味も込めて、今AndroidのSDKやUIについて勉強しています。
まあ、でもそろそろKotlinも触って行きたいな。