我现在拥有的是TextView元素的ListView。每个TextView元素都显示一个文本(文本长度从12个单词到100+个变化)。我想要的是使这些TextView显示一部分文本(假设20个单词或大约170个字符)。
如何将TextView限制为固定数量的字符?
Answers:
这是一个例子。我使用maxLength属性限制大小,使用maxLines属性将其限制为一行,然后使用ellipsize = end自动在已截断的任何行的末尾添加“ ...”。
<TextView
android:id="@+id/secondLineTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:maxLength="10"
android:ellipsize="end"/>
如果您对xml解决方案不感兴趣,则可以执行以下操作:
String s="Hello world";
Textview someTextView;
someTextView.setText(getSafeSubstring(s, 5));
//the text of someTextView will be Hello
...
public String getSafeSubstring(String s, int maxLength){
if(!TextUtils.isEmpty(s)){
if(s.length() >= maxLength){
return s.substring(0, maxLength);
}
}
return s;
}
在TextView中使用以下代码
android:maxLength="65"
请享用...
您可以使用TextView类的setEllipsize方法 http://developer.android.com/reference/android/widget/TextView.html#setEllipsize(android.text.TextUtils.TruncateAt)
使用TextUtil类的常量添加了悬浮点 http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
程序化Kotlin。
截断文本的开头:
val maxChars = 10000
if (helloWorldTextView.text.length > maxChars) {
helloWorldTextView.text = helloWorldTextView.text.takeLast(maxChars)
}
剪掉文字结尾:
val maxChars = 10000
if (helloWorldTextView.text.length > maxChars) {
helloWorldTextView.text = helloWorldTextView.text.take(maxChars)
}
我正在分享一个示例,其中我已设置maxLength = 1,即将其限制为具有maxLines属性的单行,然后使用ellipsize = end将“ ...”自动添加到已截断的任何行的末尾。
请注意:layout_width为120dp,即120dp之后的任何 超出的文本都会触发“ ellipsize = end”属性
直接粘贴以下代码进行检查。
<TextView
android:layout_width="120dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:maxLength="40"
android:text="Can I limit TextView's number of characters?"
android:textColor="@color/black"
android:textSize="12sp"
android:textStyle="bold" />
。
如https://stackoverflow.com/a/6165470/1818089和https://stackoverflow.com/a/6239007/1818089中所述,使用
android:minEms="2"
应该足以实现上述目标。
您可以扩展TextView类并覆盖setText()函数。在此功能中,您将检查文本长度或字库。