[android] TextView의 maxLines과 ellipsize 버그

android 2013. 4. 29. 21:39

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

기본으로 제공하는 TextView을 이용해서 maxLines ellipse를 이용해서 2줄까지 표시하면서 더 긴경우에는 말줄임으로 하고 싶을때가 있다.  모두가 당연히 아래처럼 설정할 것이다.

 

<TextView

     android:id="@+id/textView1"

     android:layout_width="match_parent"

     android:layout_height="wrap_content"       

     android:maxLines="4"

     android:ellipsize="end"/>

 

maxLines 속성과 ellipsize 속성으로 4줄까지 표시되고 더 긴경우에는 말줄임이 표시되도록 의도한 것이다. Android 4.0에서 확인하면 잘 동작하는데 문제는 2.3이하에서 발생한다. 위처럼 하면 2줄까지 표시되고 말줄임이 되는 것이다.

구글링을 해보니 android의 버그라고 되어 있다.

( 참고 : http://code.google.com/p/android/issues/detail?id=2254 )

관련해서 여러가지 openSource로 해결책이 제시 되어 있다.

 

1. EllipsizingTextView

특징 :

* TextView StaticLayout을 이용하여 특정라인까지의 text를 자르고, 뒤에 을 붙이는 방식

* EllipsizeListener 를 이용하여 말줄임 여부를 체크할수 있도록 되어 있다.

* draw시점에 text를 동적으로 구하는 방식으로 adapter 에서 사용할 경우 성능 이슈가 있을수 있다.

* 확대(expand) / 축소(collapse) 기능 없음.

소스 : https://github.com/KhalidElSayed/EllipsizingTextView

 

 

 

2. TextViewMultilineEllipse

특징

* View를 상속받아서 TextPaint로 각각의 라인을 자르는 방식

* 동적으로 구하는 시점은 onMeasure에서

* 확대 / 축소 기능 있음.

* 내부의 LineBreaker 소스는 참고하면 좋을 듯

* 버그 : space가 없는 문자열인 경우 crash 발생하지만 debugging 하면 금방 고칠수 있음.

* 단점 : View를 상속받아서 TextView의 기능들을 사용할 수 없음 ( , SpannableString )

소스 : http://code.google.com/p/android-textview-multiline-ellipse/source/browse/trunk/TextViewMultilineEllipse.java?r=2

 

결론은 1번의 EllipsizingTextView를 속도 최적화 하여서 사용함.

또다른 버그가 발견했습니다.

Android 4.0 이상에서는 iPhone에서 입력한 이모티콘을 표시해주는 기능이 있는데, 1번의 코드를 사용하면 해당 이모티콘이 안보입니다. TextView를 상속받고 거기서 setText를 하면 발생합니다. 해결책은 여기 참고 https://github.com/sharakova/EmojiTextView/tree/master/src/jp/sharakova/android/emoji

 

* OpenSource는 완벽한게 아니라 해당상황에 대한 간단한 해결책인 경우가 많다. 사용시 여러방면의 test가 필요하다. 그리고 필요하면 수정해서 사용하자.

 

 



: