2013-05-15 12 views
6

Mam textview, że programowo ustawiam maxLines z, a następnie ustawiając go na android: ellipsize = "end". Działa częściowo, ale z jakiegoś powodu tekst, który jest obcięty, jest kontynuowany przez kilka znaków po elipsie w 4.2.2. Jest to rzeczywisty tekst, który jest obcięty, a nie nowe znaki.android: ellipsize w tekście ICS kontynuuje po ellipsis

Nie działa również poprawnie w wersji 2.3.6, ponieważ dodaje wielokropek dla każdej sekcji z podziałem wiersza lub "\ n".

Nie używam żadnych niestandardowych czcionek, widziałem, że wcześniej powodowało problemy.

Oto gdzie wyliczyć i ustawić 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); 
    } 
}); 

Oto mój 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> 

Odpowiedz

2

Rozwiązałem to programowo, ale Nie jestem pewien, czy to najlepsze rozwiązanie, ponieważ wydaje się bardziej hack. Wygląda jednak na to, że działa.

+0

Wydaje się, aby rozwiązać problem. Uprzejmie dziękuję. – Garcon

0

umieścić to w xml

android:singleLine="true" 
    android:ellipsize="end"    
    android:maxLines="1" 
+0

To nie zadziała, ponieważ potrzebuję wielowierszowego widoku tekstowego, który dynamicznie wypełnia przestrzeń ekranu w zależności od rozmiaru ekranu. Dlatego właśnie próbuję programowo ustawić maxLines. – user2110291