Androide: elipsis en el texto ICS continúa después de la elipsis

Tengo un textview que estoy programando el establecimiento de maxLines con y luego establecerlo en android: ellipsize = "end". Funciona parcialmente, pero por alguna razón el texto que se está truncando continúa para algunos caracteres después de los puntos suspensivos en 4.2.2. Es el texto real que se está truncando, no los nuevos caracteres.

También no funciona correctamente en 2.3.6 ya que añade una elipsis para cada sección con un salto de línea o "\ n".

No estoy usando ningunas fuentes de encargo, he visto que ha causado problemas antes.

Aquí es donde puedo calcular y establecer los maxlines:

final TextView reviewView = (TextView) view.findViewById(R.id.textViewPosition3); ViewTreeObserver observer = reviewView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int maxLines = (int) reviewView.getHeight() / reviewView.getLineHeight(); reviewView.setMaxLines(maxLines); reviewView.setEllipsize(TruncateAt.END); reviewView.getViewTreeObserver().removeGlobalOnLayoutListener(this); //reviewView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } }); 

Aquí está mi xml:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragmentTestLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/restaurantImage" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:src="@drawable/test" android:layout_marginTop="-10dp" android:layout_marginRight="20dp" android:layout_marginLeft="20dp" /> <ImageView android:id="@+id/squareBlack" android:layout_alignRight="@id/restaurantImage" android:layout_alignTop="@id/restaurantImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/square_black_small" /> <TextView android:id="@+id/textViewPosition" android:layout_alignRight="@id/squareBlack" android:layout_alignLeft="@id/squareBlack" android:layout_alignBottom="@id/squareBlack" android:layout_alignTop="@id/squareBlack" android:layout_margin="1dp" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a test" android:textSize="25sp" android:textColor="#a6cbff" android:textStyle="bold" /> <ImageView android:id="@+id/squareBlue" android:layout_toLeftOf="@id/squareBlack" android:layout_alignTop="@id/squareBlack" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/square_blue_small" /> <TextView android:id="@+id/textViewPosition1" android:layout_alignRight="@id/squareBlue" android:layout_alignLeft="@id/squareBlue" android:layout_alignBottom="@id/squareBlue" android:layout_alignTop="@id/squareBlue" android:layout_margin="1dp" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="7.5" android:textSize="25sp" android:textColor="#902515" android:textStyle="bold" /> <TextView android:id="@+id/restaurantName" android:layout_alignLeft="@id/restaurantImage" android:layout_alignBottom="@id/restaurantImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Restaurant Name" android:textSize="25sp" android:textColor="#fff" android:textStyle="bold" android:background="@drawable/greybar" /> <TextView android:id="@+id/textViewPosition2" android:layout_below="@id/restaurantImage" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="February 15, 2013" android:textColor="#555" android:textStyle="bold" android:textSize="15sp" /> <Button android:id="@+id/readReview" android:background="@drawable/readreview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Read the Review" android:textColor="#fff" android:textColorHighlight="#ccc" android:textSize="15sp" android:textStyle="bold" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/textViewPosition3" android:layout_below="@id/textViewPosition2" android:layout_above="@id/readReview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColorLink="#C90404" android:layout_marginRight="15dp" android:layout_marginLeft="15dp" android:textColor="#000" /> </RelativeLayout> 

He resuelto esto programáticamente, pero no estoy seguro de que es la mejor solución, ya que se siente más de un hack. Parece estar trabajando sin embargo.

  ViewTreeObserver observer = reviewView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int maxLines = (int) reviewView.getHeight() / reviewView.getLineHeight(); reviewView.getViewTreeObserver().removeGlobalOnLayoutListener(this); if(reviewView.getLineCount() > maxLines) { int lineEndIndex = reviewView.getLayout().getLineEnd(maxLines - 1); String text = reviewView.getText().subSequence(0, lineEndIndex-3) +" ..."; reviewView.setText(text); } } }); 

Poner esto en xml

  android:singleLine="true" android:ellipsize="end" android:maxLines="1" 
  • Cómo almacenar texto largo en Android?
  • Cómo manejar el evento "pegar" en Android 3.0 (Honeycomb)?
  • android: límite de 10 caracteres por línea TextView
  • Desplazamiento por programación de una palabra en vista en una vista de texto
  • Leftside de texto de un RadioButton con un margen en Android
  • ¿Cómo detectar pulsaciones de teclas de caracteres?
  • Animación del tamaño de texto de TextView
  • Cómo abreviar un TextView?
  • ajuste de relleno para textview no funciona
  • Cómo hacer que mi ancho de TextView mitad de su padre?
  • Android-TextView setText en Html.fromHtml para mostrar la imagen y el texto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.