Làm cách nào để hiển thị dấu chấm lửng trên TextView nếu nó lớn hơn 1 dòng?


100

Tôi có Bố cục sau không hoạt động:

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:id="@+id/experienceLayout" 
    android:background="#ffffff" 
    android:layout_height="match_parent" 
    android:paddingLeft="6dp" 
    android:paddingRight="6dp" 
    android:paddingBottom="6dp" 
    android:paddingTop="6dp">

    <TextView 
        android:layout_weight="1" 
        android:id="@+id/experienceLabel" 
        android:text="Experience" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:textStyle="bold">
    </TextView>

    <TextView 
        android:id="@+id/experienceTextView" 
        android:text="TextView" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:ellipsize="end" 
        android:lines="1" 
        android:maxLines="1" 
        android:singleLine="true" 
        android:fadeScrollbars="false">
    </TextView>

</LinearLayout>

Câu trả lời:


286

Đây là một vấn đề phổ biến. Hãy thử sử dụng như sau:

android:scrollHorizontally="true"
android:ellipsize="end" 
android:maxLines="1"

.............. the scroll Theo chiều ngang là "nước sốt đặc biệt" làm cho nó hoạt động.


12
Lạ thật ... Tôi đã thử android:scrollHorizontally="true"nhưng không được, tôi phải sử dụng thuộc tính không được dùng nữa android:singleLine="true".
Gerardo Contijoch 12/12/12

1
vâng scrollHorizontallylà thực tế chìa khóa để...
Rishabh Dutt Sharma

cuộn theo chiều ngang? rõ ràng là tôi không muốn có hiệu ứng cuộn ngang.
filthy_wizard

@ user1232726: Có, "cuộn theo chiều ngang". Theo lẽ thường, hãy xem ngày của câu hỏi và ngày của câu trả lời ... không cần phải nói rằng cả hai đều có thể không thích hợp (trước khi bình luận).
BonanzaDriver

Sử dụng ellipsize với Maxlines có thể sụp đổ ứng dụng - Báo cáo từ Android Studio IntelliSense
Vaishnav Mhetre

33

Điều này cũng sẽ tạo ra một dòng duy nhất có dấu chấm lửng

 android:singleLine="true"

15
Này không được chấp rõ ràng
Oliver Pearmain

1
Cái này tốt hơn nên ngắt những từ dài.
bpiec

android: maxLines = "1"
Jaydev

1
@grebulon Nó không được dùng nữa. Ít nhất là bây giờ.
Spikatrix

25

Dùng cái này

android:ellipsize="end"  
android:singleLine="true"

Đừng sử dụng cái này mà không biết đầy đủ về đầu ra nào

android:ellipsize="end"  
android:maxLines="1"

Khi bạn sử dụng maxlines = 1nó sẽ có lúc cắt bớt hầu hết các ký tự.


12

Cách nó hoạt động đối với tôi trên nhiều thiết bị / API được lập trình như thế này (trong đó tv là TextView của bạn):

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }

2
Đây là câu trả lời hữu ích nhất trong số tất cả ... hoạt động trên mọi API đơn lẻ và có thể dễ dàng chuyển đổi nó dưới dạng thư viện Utils.
Mariano Zorrilla

1
Bạn nên sử dụng các nhân vật lược \u2026thay vì ba .nhân vật
Chris Stillwell

Bạn nói đúng @ChrisStillwell và tôi sử dụng ký tự dấu chấm lửng trong mã của mình. Tôi đã chỉnh sửa câu trả lời, cảm ơn bạn. :)
Marilia

3

Vì vậy, tất cả các câu trả lời trên đáp ứng yêu cầu rằng chỉ có 1 dòng và sau đó dấu chấm lửng xuất hiện. Tuy nhiên, nếu bạn muốn dấu chấm lửng xuất hiện sau các dòng văn bản nhất định, thì bạn nên sử dụng như sau:

android:ellipsize="end"
android:maxLines="2"
android:singleLine="false"

Với điều này, dấu chấm lửng sẽ chỉ xuất hiện sau 2 dòng. Lưu ý: Điều quan trọng là phải có singleLine là false.


Giá trị mặc định là false theo tài liệu: developer.android.com/reference/android/widget/…
Pierre


-1

android:singleLinekhông được dùng nữa. Trong trường hợp của tôi, tôi phải lấy chiều cao cố định cho TextViewvà tôi đã sử dụng android:linesthuộc tính thay vì android:maxLines. Tôi nghĩ điều này có thể giúp ai đó gặp vấn đề giống tôi.

android:ellipsize="end"
android:lines="2"

Không đúng. Tài liệu không nói gì về việc ngừng sử dụng: developer.android.com/reference/android/widget/…
cesards

@cesards Thật thú vị. Tài liệu này nói rằng đó là - developer.android.com/reference/android/R.attr.html#singleLine
Reaz Murshed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.