TextViewが省略されたかどうかを確認する
ググってもだいたいEllipsizeの設定で自動省略の話しか出てこないのでメモる。
やりたい事
TextViewが省略表示になっているかを確認して処理したい、というモノ。
isTextTruncated()を作る
TextViewUtilsとか適当に作る。おおむねgetLatyout()
とかgetLineCount()
とかgetEllipsisCount()
とか使うと省略かどうかわかる
public class TextViewUtils { public static boolean isTextTruncated(TextView textView) { if (textView == null) { return false; } Layout layout = textView.getLayout(); if (layout == null) { return false; } int lines = layout.getLineCount(); if (lines < 1) { return false; } int ellipsisCount = layout.getEllipsisCount(lines - 1); return ellipsisCount > 0; } }
こういう時に使える
ほぼ存在しないとおもうけどこんなケース
View作成直後は省略されたか分からないのでonSizeChanged()
のタイミングとかでやる。
public class CustomView extends LinearLayout { TextView text; public CustomView(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.content_main, this); text = (TextView) findViewById(R.id.text); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (TextViewUtils.isTextTruncated(text)) { //なんかレイアウト変える } } }
Custom Viewじゃない場合ViewTreeObserver.OnGlobalLayoutListener
とかでやればいけそうだけど大変そう。
おわりに
- 省略されたかどうか確認できる。
- 使いたいケースはそんなになさそう。
- singleLine=trueの時しか使えないです