【问题标题】:Android:ellipsize end - Extra Characters after EllipsisAndroid:ellipsize end - 省略号后的额外字符
【发布时间】:2014-05-08 16:36:32
【问题描述】:

我已经设置了一个文本视图如下:

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

【问题讨论】:

    标签: android textview


    【解决方案1】:

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

    简单地做:

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

    帮我解决了这个问题

    【讨论】:

    • 谢谢。这也对我有用。我有多个换行符,不需要用空格替换它们,只需摆脱它们,所以我使用了: text.replaceAll("\n","")
    • 这行得通,但是如果您想保留换行符怎么办?
    【解决方案2】:

    我以前也遇到过类似的问题。 我建议不要将 'ellipsize' 选项与 'maxLines' 一起使用。 添加一个椭圆标记的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);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2023-03-16
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      相关资源
      最近更新 更多