在安卓中,什么是ellipsize?

256
我在我的布局中添加了一个EditText,并添加了提示文本,让它在水平方向上居中。但是运行应用程序时,提示文本是不可见的。我发现需要将TextView的ellipsize值设置为start:
<EditText
    android:id="@+id/number1EditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="start"
    android:ems="10"
    android:gravity="center_horizontal"
    android:hint="@string/hint1" />

在Android文档中,我读到:

如果设置了,会导致视图宽度超过单词被省略而不是断开。

问题在于“ellipsize”在字典中找不到。有人能解释一下我们可以通过“ellipsize”属性获得什么好处吗?以及“start”,“end”,“middle”之间有什么区别?


请参考我的更新答案。 - RPB
6
顺便提一下,“ellipsized”这个词实际上是虚构出来的。它叫做“名词动词化”,是形成计算机术语的一种常见方式。名词是“ellipse”,我想你应该知道它的意思,加上“-ize”后就变成了动词,意思是“使成为”,因此,“ellipsize”的含义就是“在某物上添加椭圆形”。 - Michael Edenfield
8
历史上出现的拼写错误从未被更正。实际上,该术语应为“省略号”而非“椭圆”。“椭圆”是一个平面曲线,围绕着两个焦点,使得从其中一个焦点到曲线上任何一点的直线长度相等。而“省略号”则指三个点。 - radley
ellipseSize的文档中仍缺少描述。 - Talha
@MichaelEdenfield 我相信将名词“省略号”反推回动词“椭圆化”比“省略化”更合理。 - Константин Ван
10个回答

473

您可以在这里找到文档 here

根据您的需求,您可以尝试相应的选项。

对于ellipsize,一个新词,意味着使用省略号ellipsis来缩短文本,即三个点...或更常见的连字号,代替省略的部分。

假设文本视图的原始值为aaabbbccc并且适合于视图中

start的输出将是:...bccc

end的输出将是:aaab...

middle的输出将是:aa...cc

marquee的输出将是:aaabbbccc从右向左自动滑动


谢谢。但我已经阅读过了。它使用了“ellipsized”这个词,而我正在寻找关于它的意思。该单词不能在其定义中使用!! 请进一步解释? - Hamzeh Soboh

85

根据我的经验,只有在设置以下两个属性时,省略号才有效。

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

对于 TextView 的宽度,wrap_contentmatch_parent 都可以使用。


6
“android:singleLine”从API 3开始已被弃用,应使用“android:maxLines”。请注意:如果同时提供 singleLine 和 inputType,inputType 标志将覆盖 singleLine 的值。请查看 R.attr.html#singleLine 上的文档。 - Filipe Bezerra de Sousa
1
我注意到如果android:ellipsize="start"和android:maxLines="2"(或更多),它不起作用。尽管文本太长,但我没有看到任何点在开头。 - ka3ak
这是正确的答案。它对我起作用了。maxLines="1"而没有singleLine="true"对我没用。 - user882290

19

android:ellipsize 是从API Level 1开始添加的。一个 ellipsis 是三个连续的点(...)。

在您的 .xml 文件中使用。

 <TextView
       ....
       android:text="Hi I am Amiyo, you can see how to ellipse works."
       android:ellipsize = "end" />

在这一点上,省略号还不会显示,因为当输入新文本时,默认情况下TextView会自动扩展。您需要以某种方式限制TextView。为此,您可以在TextView中添加scrollHorizontallyminLinesmaxLines之一,以显示省略号。

要创建省略号:

    at the end: this is how it would.   
    use: android:ellipsize = "end"

 in the middle:
 use: android:ellipsize = "middle"

并且

 at the start:
 use: android:ellipsize = "start"

并且

 to have no ellipse
 use: android:ellipsize = "none"

请注意:

Do not use android:singeLine = "true", it is deprecated.
android:maxLines = "1" will not display the three dots (...)
android:lines = "1" will not display the three dots (...)

更多细节请访问 这里


10

省略号是连续三个句点...

当TextView无法展示所有的文本时,它会使用省略号。属性ellipsized设置了三个点的位置,以便在必要时使用。


5

Text:

 This is my first android application and
 I am trying to make a funny game,
 It seems android is really very easy to play.

假设以上是你的文本,如果你使用 ellipsizestart 属性,它会显示为这样。
This is my first android application and
...t seems android is really very easy to play.

使用 end 属性
 This is my first android application and
 I am trying to make a funny game,...

5
以下是一个示例,展示了如何在 ConstraintLayout 中不使用已弃用的 android:singleLine="true" 来使用 ellipsize 的方法:
<TextView
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:textSize="13sp"
   android:ellipsize="end"
   android:maxLines="2"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   tools:text="long long long long long long text text text" />

请记住,如果您有一段应该只显示在一行的文本,则需要将 maxLines 属性设置为 1。


谢谢,这个解决方案解决了我的问题。关键是使用 android:layout_width="0dp" 而不是 android:layout_width="wrap_content"。请注意,这适用于我正在使用的 ConstraintLayout。在这里也有讨论 https://dev59.com/ulcO5IYBdhLWcg3wVAE0#48149405。 - Michael Osofsky

1
将此属性设置为EditTextEllipsize 与禁用的EditText一起使用。
android:lines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
android:singleLine="true"
android:editable="false"

or setKeyListener(null);


设置上述所有属性并设置setKeyListener(null),除了可编辑属性。 - Mubarak

1
注意:以下内容需要滚动,您的文本必须大于容器框。
 android:ellipsize="marquee"    

0

当你有固定宽度时,使用ellipsize,它会自动截断文本并在末尾显示省略号。

如果将layout_width设置为wrap_content和match_parent,则不起作用。

android:width="40dp"
android:ellipsize="end"
android:singleLine="true"

0

如上所述,如果由于布局大小或设置限制而没有足够的文本空间,则ellpsize会为其添加省略号。

这里有一个例子: 顶部:使用ellipsize(此处将其设置为“end”) 底部:不使用 enter image description here


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