Android:ellipsize end - 省略后的额外字符

时间:2013-08-02 10:16:16

标签: android textview

我已按如下方式设置了文字视图:

<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看到这种行为:结束?对于我可能做错了什么或者我如何解决这个问题的任何建议?

2 个答案:

答案 0 :(得分:6)

通过大量的反复试验,我发现它是由'\ n'字符引起的。当文本中某处有新行时,ellipsize =“end”会出现某种问题,即使它在ellipsize之后很好。

简单地做:

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

为我解决了这个问题

答案 1 :(得分:0)

我之前遇到过类似的问题。 我建议不要在'maxLines'中使用'ellipsize'选项。 添加一个椭圆形标记textView,它可以通过编程方式进行控制。

<强>布局

<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="..."/>

<强>代码

if(multiLineText.getLineCount() > multiLineText.getMaxLines()) {
    ellipsizeMarkText.setVisibility(View.VISIBLE);
} else {
    ellipsizeMarkText.setVisibility(View.GONE);
}
相关问题