2011-02-01 83 views
17

Tôi có một TextView trong đó tôi phải tải một tin nhắn. TextView có tối đa 2 dòng (android:lines="2"). Tin nhắn có thể chứa ký tự '\ n'.Văn bản hiển thị văn bản một phần

Làm cách nào để tải thư trong TextView để từ được bao bọc và nếu trong 2 dòng thư đó không vừa, ở cuối từ hiển thị cuối cùng, tôi phải thêm ba dấu chấm (...)? Làm thế nào tôi có thể phát hiện độ dài của văn bản phù hợp với TextView đó?

Mã của tôi cho TextView là

<TextView 
      a:id="@+id/tv_message" 
      a:gravity="top" 
      a:layout_width="wrap_content" 
      a:layout_height="wrap_content" 
      a:layout_alignParentTop="true" 
      a:layout_toRightOf="@id/iv_icon" 
      a:layout_marginLeft="2dp" 
      a:layout_marginTop="4dp" 
      a:paddingRight="7dp" 
      a:paddingBottom="5dp" 
      a:textSize="12sp" 
      a:typeface="sans" 
      a:ellipsize="marquee" 
      a:lines="2" 
      a:maxLines="2" 
      a:textColor="@android:color/black" 
      /> 

Nhưng trong ứng dụng, văn bản xuất hiện trên hai dòng, thậm chí nếu có một dòng chứa chữ ký. Tin nhắn giống như: "message text" + "\ nSignature" nhưng tin nhắn có thể trên 1,2,3 dòng, tùy thuộc vào độ dài tin nhắn.

+0

Tại sao bạn cần biết chiều dài của văn bản? Nó có thể thay đổi theo kích thước màn hình khác nhau, trừ khi bạn xác định chiều rộng cố định cho TextView. – Adinia

+0

Vấn đề của tôi là tôi không biết cách thêm 3 dấu chấm vào cuối từ hiển thị cuối cùng. Android: elli psize = "end" và android: ellipsize = "marquee" không giúp được .... vì vậy tôi nghĩ rằng tôi không thêm tất cả văn bản vào textview, nhưng chỉ văn bản phù hợp với textview –

+0

bạn có thể đăng mã cho TextView mà bạn đang sử dụng bây giờ? có thể có những đặc tính khác ngăn cản việc làm mờ hình elip. – Adinia

Trả lời

24

Trong XML, hãy sử dụng thuộc tính android:ellipsize="marquee" cho TextView.

TextView của bạn có thể được định nghĩa như sau:

<TextView 
android:id="@+id/text" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:maxLines="2" 
android:lines="2" 
android:ellipsize="marquee"/> 

Sửa: Tôi đã thử đoạn mã sau, chuyển thể từ bạn:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rlt_news" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/cell_background" 
    android:padding="5dip" > 

    <TextView 
     android:id="@+id/tv_title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:paddingLeft="5dip" 
     android:text="Name" 
     android:textStyle="bold" /> 

    <ImageView 
     android:id="@+id/rss_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/tv_title" 
     android:layout_marginLeft="2dip" 
     android:adjustViewBounds="true" 
     android:maxHeight="100dip" 
     android:maxWidth="100dip" 
     android:src="@drawable/rss_cell_icon" 
     android:visibility="visible" /> 

    <TextView 
     android:id="@+id/tv_description" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="2dp" 
     android:layout_marginTop="4dp" 
     android:layout_toRightOf="@id/rss_icon" 
     android:ellipsize="marquee" 
     android:gravity="top" 
     android:lines="2" 
     android:maxLines="2" 
     android:paddingBottom="5dp" 
     android:paddingRight="7dp" 
     android:text="Description of the news, just the short paragraph, \nSignature, to see how it works if there are more than two lines" 
     android:textColor="@android:color/black" 
     android:textSize="12sp" 
     android:typeface="sans" /> 

</RelativeLayout> 

Và đây là kết quả:
enter image description here

+0

nó không giúp ... Nếu tôi có thông báo: line1 \ nline2 \ nline3 sau dòng2 Tôi phải thêm 3 dấu chấm vì thư không phù hợp với –

+0

bạn có cố sử dụng thuộc tính này không?Nó chỉ cắt ngắn văn bản sau dòng thứ hai và đặt ba chấm cho bạn, tôi cắt và dán nó từ mã của tôi. – Adinia

+0

Tôi đã đính kèm mã của tôi cho xml –

0
String s = "line1 \nline2 \nline3"; 
    String [] lines = s.split("\n"); 
    String twolines; 
    if (lines.length > 2) { 
     twolines = lines[0] + "\n" + lines[1] + "..."; 
    } else { 
     twolines = s; 
    } 

này sẽ cho bạn kết quả mong muốn, chỉ cần sử dụng

((TextView)findViewById(R.id.text)).setText(twolines); 
+0

nó không giúp ... Nếu tôi có thông báo: line1 \ nline2 \ nline3 sau dòng2 Tôi phải thêm 3 dấu chấm vì thư không phù hợp với –

+0

nhưng dòng đầu tiên của thư có thể đủ dài để vừa với 3 dòng textview, do đó, điều này không giúp –

12

Sử dụng android:ellipsize="end" thay vì "vùng" mà đã làm nó cho tôi.

+0

nó hoạt động cũng cho tôi .. Cảm ơn @Ashwin –

8

Gabi,

Tôi cũng gặp vấn đề tương tự. Để bật hình elip trên một lần xem văn bản với 2 dòng, tôi sử dụng các thông số sau:

android:maxLines="2" // You already got this one 
android:ellipsize="end" // also this one 
android:singleLine="false" // This is the command that solves your problem. 

Thật không may là tôi có một kịch bản mới cho ứng dụng của mình. Tôi phải sử dụng 3 dòng với ellipsize và cấu hình này chỉ hoạt động cho 2 dòng ... :(Chúc may mắn

+0

@ Làm thế nào nó làm việc cho tôi. Tôi đăng ký 1 dòng. Cảm ơn bạn rất nhiều. – praveenb

4

Nếu bạn đặt văn bản từ mã, hơn là bạn phải thiết lập tùy chọn một lần nữa!

textView.setText(content); 
textView.setEllipsize(TruncateAt.END); 
textView.setLines(5); 
textView.setMaxLines(5); 
2

Nó hoạt động cho tôi khi tôi đặt mã trong mã không nằm trong bố cục XML

holder.txtDescription.setText(text); 
holder.txtDescription.setMaxLines(3); 
holder.txtDescription.setEllipsize(TruncateAt.END); 
Các vấn đề liên quan