2013-05-15 2 views
6

프로그래밍 방식으로 maxLines을 설정하고 android : ellipsize = "end"로 설정하는 textview가 있습니다. 부분적으로 작동하지만 4.2.2 절의 줄임표 뒤에 몇자를 위해 어떤 이유로 문자가 잘 리게됩니다. 새로운 문자가 아닌 실제 텍스트입니다.android : 줄임표 뒤에 ICS 텍스트의 줄임표가 계속됩니다.

또한 각 섹션에 줄 바꿈 또는 "\ n"이있는 줄임표가 추가되어 있기 때문에 2.3.6에서 제대로 작동하지 않습니다.

사용자 지정 글꼴을 사용하고 있지 않습니다. 이전에 문제가 발생한 것으로 보았습니다. 여기

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); 
    } 
}); 

내 XML이다 : 나는 maxlines을 계산하고 설정 한 경우 다음

이다

<?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> 

답변

2

XML에 넣고 해킹 같은 느낌이들 때 최상의 솔루션이라고 확신하지 못합니다. 그래도 작동하는 것 같습니다.

 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); 
      } 
     } 
    }); 
+0

문제를 해결하는 것 같습니다. 감사합니다. – Garcon

0

내가 프로그래밍 방식으로이 문제를 해결하지만,

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

스크린 크기에 따라 화면 공간을 동적으로 채우는 다중 줄 텍스트 뷰가 필요하기 때문에이 방법은 작동하지 않습니다. 따라서 왜 maxLines을 프로그램 적으로 설정하려고하는지. – user2110291