如果大于1行,如何在TextView上显示椭圆?


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>

Answers:


285

这是一个普遍的问题。尝试使用以下内容:

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

............... scrollHorizo​​ntally是使它起作用的“特殊调味料”。


12
奇怪...我尝试过,android:scrollHorizontally="true"但是没有用,我不得不使用不推荐使用的属性android:singleLine="true"
Gerardo Contijoch

1
scrollHorizontally的真正钥匙是...
里沙卜·杜特·夏尔马

滚动水平?显然我不希望水平滚动效果。
filthy_wizard

@ user1232726:是的,“水平滚动”。作为常识,看看问题的日期和答复的日期……不言而喻,目前两者都不是相对的(在发表评论之前)。
BonanzaDriver

在maxLines上使用ellipsize可能会使应用程序崩溃-Android Studio intellisense的报告
Vaishnav Mhetre,2018年


25

用这个

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

在不完全知道输出内容的情况下不要使用此功能

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

当您使用maxlines = 1它时,将截断大多数字符。


12

它在多种设备/ API上为我工作的方式是这样编程的(其中TV是您的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设置为false很重要。




-1

android:singleLine不推荐使用。就我而言,我必须为设置一个固定的高度,TextView然后使用android:lines属性代替android:maxLines。我认为这可能会帮助遇到与我相同的问题的人。

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

不对。文件并没有说明任何折旧: developer.android.com/reference/android/widget/...
cesards

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.