Android:TextView自动截断并替换String的最后3个字符


131

如果a 的宽度String大于TextView的宽度,则会自动换行到下一行。我可以使用android:singleLine(不建议使用)或通过设置来避免这种情况android:inputType="text"。我现在需要的是String用“ ... ” 代替我的后三个字符的东西。由于我没有使用等宽字体,因此根据我使用的字母,它总是会有所不同String。因此,我想知道在a中获取字符串的最后3个字符TextView并替换它们的最佳方法是什么。也许在Android框架中已经实现了某些东西,因为这一定是一个普遍的问题。

Answers:


290

您应该能够使用文本视图的“ ellipsize”属性:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_mytext"
    android:ellipsize="end"
    android:maxLines="1"
/>

您可能还需要将引力值应用到布局。我有时会看到没有它们的“自动拉伸”视图。


完善。谢谢。我之前曾经尝试过,但是没有用,因为我使用了android:inputType =“ text”而不是android:singleLine =“ true”(应该弃用)。但是现在我要坚持使用android:singleLine =“ true”。Muchas gracias。
znq

44
它仍然不添加“ ...”。对我来说,这个问题还没有完全解决!这个答案会使“ short verylongword”变成“ short”而不是“ short verylon ...”。此外,你们建议使用不推荐使用的属性。
OneWorld 2010年

7
效果很好,但是不建议使用singleLine,因此必须改用maxLines =“ 1”。注意,ellipsize也适用于多行!
Torre Lasley

4
不建议使用singleLine。使用maxLines =“ 1”。只是对旧答案的评论
Ewoks,2016年

1
MaxLine = 1将在中间截断textview。SingleLine = True可以正常工作。

33

找到了一个有趣的解决此问题的方法。

maxLines=1
ellipsize=end
scrollHorizontally=true

诀窍是关于水平滚动的最后一条语句....检查出来。它至少适用于v2.2。


有趣的...很高兴知道。感谢Marco的提示。
BonanzaDriver 2012年

4

以编程方式,您可以使用:

TextView tx = new TextView(this);
tx.setTextSize(13);
tx.setGravity(Gravity.CENTER);
tx.setTop(90);
tx.setText("Long text here");
tx.setTextColor(Color.BLACK);
tx.setSingleLine(true);
tx.setEllipsize(TruncateAt.END);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.