安卓 - ellipsize="end" 不显示三个点

5
我正在处理包含在ConstraintLayout中的TextView。如果文本长度超过maxLength,我希望ellipsize在文本末尾添加三个点(...)。
经过详细研究后,maxLines="1"和ellipsize="end"似乎是最佳答案。但不幸的是,这对我的情况没有用。三个点根本没有显示。
以下是截图:
原始字符串为“Test for long description”(n被删除)。应该显示为“Test for long descrip...”。
以下是我的xml:
<TextView
    android:id="@+id/txtDescription"
    android:maxLength="24"
    android:maxLines="1"
    android:ellipsize="end"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="120dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="16dp"
    android:layout_marginBottom="8dp"
    android:text="DescriptionView"
    android:textSize="18sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.72" />

我觉得XML文件中有一个覆盖了ellipsize的东西,或者是我在XML文件中漏掉了一些重要的东西吗?


您所发布的图片不是 XML 文件。 - navylover
@navylover 这个xml是用来描述图片中的TextView的。而这张图片则是整个Constraintlayout的。 - Jerry Chen
改进的格式和语法改进的格式和语法 - Sagar Zala
6个回答

9
问题是:
android:maxLength="24"

如果你想让TextView显示省略号,那么就需要移除它。当TextView的宽度不足以显示全部文本时,会出现省略号。我认为你可能不太理解android:ellipsize="end"属性的作用。如果宽度足够,则不会显示任何省略号,因为它们是不必要的。如果设置了android:layout_width="40dp",则会显示省略号。使用android:layout_width="wrap_content"时,TextView足够宽,不会出现省略号。


1
无法工作。唯一的变化是它显示整个字符串,而不是省略号。 - Jerry Chen
1
如果它显示整个字符串,则意味着它足够宽以显示整个字符串。 - forpas
是的,你说得对!在将TextView宽度设置为特定值后,一切都按照我想要的方式进行了! - Jerry Chen

4

1) 在您的Textview中,添加一个属性android:singleLine="true"

(但它已被弃用,因此请使用第二种选项)

2) 将这三个一起使用

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

它不起作用,即使scrollHorizontally也无法滚动,但还是谢谢。 - Jerry Chen
你是否为EditText设置了固定宽度? - Soham Pandya
android:singleLine="true"已经被弃用,请使用android:maxLines= "1" 代替。 - iCantC

1

在Android中,Ellipsize是一个很麻烦的问题,在您的textView上应用以下方法:

txtDescription.setSingleLine(true);

希望它有所帮助。

不,它还没有工作。还是一样的,无论如何谢谢。 - Jerry Chen
尝试改变布局宽度,尝试给定特定值。 - Sahil
是的!它有效了。它终于被省略了!非常感谢! - Jerry Chen

0
要解决这个问题,您需要在xml中使用固定宽度来替代maxLength属性。
XML示例:
android:maxLines="1"
android:ellipsize="end"

在Java/Kotlin程序中:[重要]

textDescription.setSelected(true) -> Java

或者

textDescription.isSelected=true -> Kotlin

0
制作三个点的关键是限制文本视图的宽度。 假设您发布的图片名称为left_image, 请将TextView的XML属性更改如下:
....
android:layout_width="0dp" 
app:layout_constraintStart_toEndOf="@+id/left_image"
....

上述两行代码将TextView的宽度限制在左侧图像和父容器右边框之间。


我将TextView的宽度设置为特定值,它有效了!谢谢! - Jerry Chen

0
在我的情况下,以下这行代码是问题所在。我将其注释掉后,它就可以正常工作了。
<item name="android:inputType">text|textNoSuggestions</item>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接