2013-05-15 32 views
6

Tôi có một bản xem văn bản rằng tôi đang lập trình thiết lập maxLines bằng và sau đó đặt nó thành android: ellipsize = "end". Nó hoạt động một phần, nhưng vì lý do nào đó, văn bản được cắt ngắn tiếp tục cho một vài ký tự sau dấu ba chấm trong 4.2.2. Đây là văn bản thực tế đang bị cắt ngắn, không phải là ký tự mới.android: ellipsize trong văn bản ICS tiếp tục sau dấu ba chấm

Nó cũng không hoạt động bình thường trong 2.3.6 vì nó thêm dấu ba chấm cho mỗi phần có ngắt dòng hoặc "\ n".

Tôi không sử dụng bất kỳ phông chữ tùy chỉnh nào, tôi đã thấy rằng đã gây ra sự cố trước đây.

Đây là nơi tôi tính toán và thiết lập các 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); 
    } 
}); 

Đây là xml của tôi:

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

Trả lời

2

tôi giải quyết này programatically, nhưng Tôi không chắc đó là giải pháp tốt nhất vì nó cảm thấy giống như một hack. Có vẻ như nó đang hoạt động.

 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

Dường như để giải quyết vấn đề. Cám ơn sự tử tế của anh. – Garcon

0

đặt này trong xml

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

Điều này sẽ không hiệu quả, vì tôi cần chế độ xem văn bản nhiều dòng tự động lấp đầy không gian của màn hình tùy thuộc vào màn hình. Do đó tại sao tôi đang cố gắng để thiết lập maxLines programatically. – user2110291

Các vấn đề liên quan