8

我设置了一个文本视图,如下所示:

<TextView
            android:id="@+id/TextView_top"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:ellipsize="end"
            android:maxLines="3"
            android:textColor="@color/white"
            android:textIsSelectable="false"
            android:textSize="14sp" />

里面的文本由布局充气器以编程方式设置,文本来自 XML 提要。我检查了来源,没有杂散字符或换行符。

在运行 Android 4.3 的 Nexus 4 上测试这个 TextView 我看到了奇怪的行为。

里面的字符串结束:“”Lorem ipsum dolor sit amet”

在 Nexus 上,这是在正确的位置截断,但不是以省略号字符结尾,例如:“dol ...”,而是“dol ...s”,最后一个字符在突破利润。

增加边距然后在最后给我“ipsum ...dol”。

我已经在我的其他测试设备上检查了这一点,一个运行 4.1.2 的 Galaxy S3 和一个运行 4.0.3 的 Desire C,但这些设备上不存在。

有没有其他人用 ellipsize:end 看到过这种行为?关于我可能做错了什么或如何解决这个问题的任何建议?

4

2 回答 2

6

通过大量的试验和错误,我发现它是由一个 '\n' 字符引起的。当文本中某处有新行时,ellipsize="end" 会出现某种问题,即使它在椭圆大小之后也是如此。

简单地做:

text = text.replace('\n',' ');

为我解决了这个问题

于 2013-09-27T17:44:25.930 回答
0

I faced similar problem before. I recommend that do not use 'ellipsize' option with 'maxLines'. Add a ellipsize mark textView and it can be controlled programically.

Layout

<TextView
        android:id="@+id/multiLineText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="3"/>

<TextView
        android:id="@+id/ellipsizeMarkText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="..."/>

Code

if(multiLineText.getLineCount() > multiLineText.getMaxLines()) {
    ellipsizeMarkText.setVisibility(View.VISIBLE);
} else {
    ellipsizeMarkText.setVisibility(View.GONE);
}
于 2014-05-08T08:36:32.727 回答