2013-08-02 20 views
8

mam skonfigurować widok tekst w następujący sposób:Android: ellipsize koniec - dodatkowe znaki po Ellipsis

<TextView 
      android:id="@+id/TextView_top" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginTop="5dp" 
      android:ellipsize="end" 
      android:maxLines="3" 
      android:textColor="@color/white" 
      android:textIsSelectable="false" 
      android:textSize="14sp" /> 

Tekst wewnątrz jest ustawiony programowo przez napełniacz układu, z tekstem pochodzące z kanału XML. Sprawdziłem źródło i nie ma zbłąkanych znaków ani linii podziału.

Testowanie tego widoku tekstu na Nexusie 4 z systemem Android 4.3 Widzę dziwne zachowanie.

Ciąg wewnątrz kończy: „” Lorem ipsum dolor sit amet”

Na Nexus to obcinanie na właściwym miejscu, ale zamiast kończąc na charakterze elipsy jak:«dol ...», I otrzymuję «DOL ... s» z ostatecznym charakterem pół zasłonięte, gdyż przełamuje marginesie.

Zwiększenie marży następnie daje mi «ipsum ... dol» na końcu.

I Sprawdziłem to na moim innym urządzeniu Test a Galaxy S3 z wersją 4.1.2 i Desire C działającym na 4.0.3 i nie ma ich na tych urządzeniach

Czy ktoś inny widział to zachowanie z wielokropkiem: koniec? Wszelkie sugestie dotyczące tego, co mogłem zrobić źle lub jak mogę to obejść?

Odpowiedz

6

Po wielu próbach i błędach odkryłem, że jest to spowodowane przez znak "\ n". Występuje pewien problem z ellipsize = "end", gdy istnieje gdzieś w tekście nowa linia, nawet jeśli ma się dobrze po elipsize.

robi po prostu:

text = text.replace('\n',' '); 

stałe ten problem dla mnie

+0

Dziękuję. To też zrobiło dla mnie trudność. Miałem wiele przerw w linii i nie musiałem ich zastępować spacjami, po prostu się ich pozbyłem, więc użyłem: text.replaceAll ("\ n", "") – Keab42

+2

To działa, ale co jeśli chcesz zachować znaki nowej linii w? – kassim

0

wychodził podobny problem wcześniej. Zalecam, aby nie używać opcji "ellipsize" z "maxLines". Dodaj znacznik elipsy textView i można nim sterować programowo.

Układ

<TextView 
     android:id="@+id/multiLineText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:maxLines="3"/> 

<TextView 
     android:id="@+id/ellipsizeMarkText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:text="..."/> 

Kod

if(multiLineText.getLineCount() > multiLineText.getMaxLines()) { 
    ellipsizeMarkText.setVisibility(View.VISIBLE); 
} else { 
    ellipsizeMarkText.setVisibility(View.GONE); 
} 
Powiązane problemy