ฉันจะแสดงจุดไข่ปลาบน TextView ของฉันได้อย่างไรหากมีค่ามากกว่า 1 บรรทัด


100

ฉันมีเค้าโครงต่อไปนี้ซึ่งใช้งานไม่ได้:

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

คำตอบ:


287

นี่เป็นปัญหาที่พบบ่อย ลองใช้สิ่งต่อไปนี้:

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

.............. ในทางตรงกันข้ามคือ "ซอสพิเศษ" ที่ทำให้มันได้ผล


12
แปลก ... ฉันพยายามแต่มันก็ไม่ได้ทำงานผมต้องใช้แอตทริบิวต์เลิกandroid:scrollHorizontally="true" android:singleLine="true"
Gerardo Contijoch

1
ใช่scrollHorizontallyคือกุญแจสำคัญในการ...
Rishabh Dutt Sharma

เลื่อน เห็นได้ชัดว่าฉันไม่ต้องการเอฟเฟกต์การเลื่อนแนวนอน
filthy_wizard

@ user1232726: ใช่ "เลื่อนในแนวนอน" ตามสามัญสำนึกให้ดูวันที่ของคำถามและวันที่ของคำตอบ ... ไปโดยไม่บอกว่าอาจไม่เกี่ยวข้องในขณะนี้ (ก่อนแสดงความคิดเห็น)
BonanzaDriver

การใช้จุดไข่ปลากับ maxLines อาจทำให้แอปขัดข้อง - รายงานจาก Android Studio Intellisense
Vaishnav Mhetre

34

นอกจากนี้ยังจะทำให้บรรทัดเดียวเป็นจุดไข่ปลา

 android:singleLine="true"

15
เห็นได้ชัดว่าสิ่งนี้เลิกใช้แล้ว
Oliver Pearmain

1
อันนี้แบ่งคำยาว ๆ ดีกว่า
bpiec

android: maxLines = "1"
Jaydev

1
@grebulon เลิกใช้แล้ว อย่างน้อยก็ตอนนี้
Spikatrix

25

ใช้สิ่งนี้

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

อย่าใช้สิ่งนี้โดยไม่ทราบว่าเอาต์พุตมาจากอะไร

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

เมื่อคุณใช้maxlines = 1มันบางครั้งจะตัดทอนอักขระส่วนใหญ่


13

วิธีการทำงานสำหรับฉันบนอุปกรณ์ / API หลายเครื่องเป็นแบบนี้โดยทางโปรแกรม (โดยที่ทีวีคือ TextView ของคุณ):

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

2
นี่คือคำตอบที่เป็นประโยชน์ที่สุดของทุกคน ... ใช้ได้กับทุก API เดียวและสามารถแปลงเป็นไลบรารี Utils ได้อย่างง่ายดาย
Mariano Zorrilla

1
คุณควรใช้อักขระจุดไข่ปลา\u2026แทน.อักขระสามตัว
Chris Stillwell

คุณพูดถูก @ChrisStillwell และฉันใช้อักขระจุดไข่ปลาในรหัสของฉัน ฉันแก้ไขคำตอบแล้วขอบคุณ :)
Marilia

3

ดังนั้นคำตอบทั้งหมดข้างต้นจึงเป็นไปตามข้อกำหนดที่ว่าควรมีเพียง 1 บรรทัดแล้วจุดไข่ปลา อย่างไรก็ตามหากคุณต้องการให้จุดไข่ปลาปรากฏหลังข้อความบางบรรทัดคุณควรใช้สิ่งต่อไปนี้:

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

ด้วยวิธีนี้จุดไข่ปลาจะปรากฏหลังจาก 2 บรรทัดเท่านั้น หมายเหตุ: สิ่งสำคัญคือต้องมี singleLine เป็นเท็จ


ค่าเริ่มต้นเป็นเท็จตามเอกสาร: developer.android.com/reference/android/widget/…
Pierre


-1

android:singleLineเลิกใช้แล้ว ในกรณีของฉันฉันต้องได้รับความสูงคงที่สำหรับTextViewและฉันใช้android:linesแอตทริบิวต์แทนandroid:maxLines. ฉันคิดว่านี่อาจช่วยคนที่มีปัญหาเดียวกับฉัน

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

ไม่จริง. เอกสารไม่ได้บอกอะไรเกี่ยวกับการเลิกใช้งาน: developer.android.com/reference/android/widget/…
cesards

@cesards น่าสนใจ เอกสารนี้ระบุว่าเป็น - developer.android.com/reference/android/R.attr.html#singleLine
Reaz Murshed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.