태그 보관물: TextView

TextView android:maxLines과 android:ellipsize 사용시 주의할 점

안드로이드 텍스트뷰는 가장 많이 사용하는 컴포넌트 중의 하나이고, 또 이 컴포넌트의 텍스트는 많은 경우 줄임(ellipse…)을 사용한다. 내 경우에는 가운데 줄임을 많이 사용하는 편이고, 아래와 같이 사용한 경우가 있었다.

<TextView
 android:id="@+id/action_detail_path"
 style="@style/SmallText"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="4dp"
 android:ellipsize="middle"
 android:maxLines="2"
 android:text="@string/lbl_empty"
 />

위 XML 코드는 문제가 없어 보인다. 대부분의 경우에는 문제가 없이 잘 동작해 보였다.

그러나, 간혹 이 텍스트뷰로 인해서 크래시가 발생할 수도 있다. 발생할 수도 있다는 경우는 자주는 아니지만 가끔 발생한다는 것이다. 그래서 위 android:ellipse에 대응하는 TextView API는 setEllipsize 메서드이고, 아래와 같이 설명하고 있다.

void setEllipsize (TextUtils.TruncateAt where)

Causes words in the text that are longer than the view’s width to be ellipsized instead of broken in the middle. You may also want to setSingleLine() or setHorizontallyScrolling(boolean) to constrain the text to a single line. Use null to turn off ellipsizing. If setMaxLines(int) has been used to set two or more lines, only END and MARQUEE are supported (other ellipsizing types will not do anything).
Related XML Attributes:

– android:ellipsize

위 설명을 보면, setMaxLines() 메서드 인자가 2보다 크면, ellipse로 END, MARQUEE만 지원한다는 것이다. 결국 위 xml의 android:ellipsize=”middle”이 크래시를 유발할 수 있다.

앱에서 이 버그가 많이 발생하지 않아서 발견하기 어려(?)웠는데… 이게 다 API를 잘 읽어보지 않고 막 쓰는 제 불찰이었네요.. 괜히 애꿎은 제조사 탓만 했네요..ㅋㅋ