Android TextView 文字长度控制
Android中TextView是最常用的的控件之一,主要用于文本的展示。
文本展示中,文本长度的控制还是挺需要注意的地方,下文将就此进行一些实验和分析。
TextView有几种控制文本长度的方法
android:maxWidth 控制View的长度来控制文本长度
android:maxLength 控制字符的个数来控制文本长度
android:maxEms 控制字符的长度来控制文本长度
以下使用简单的结构来分别进行验证
android:maxWidth + android:maxLines
<TextView
android:id="@+id/text"
android:maxWidth="50dp"
android:textSize="14sp"
android:ellipsize="end"
android:maxLines="1"
android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
android:background="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
这是比较简单粗暴的方法,通过长度和行数的设置,直接截断输入的文本。文本的字体大小改变后,可以展示的文字个数也会随之改变。支持省略号的缩进(android:ellipsize属性)。
PS:maxline = 1 与singleLine = true效果相同,不过魅族部分机型不支持maxLine,所以可以用singleLine更好些。
android:maxLength
<TextView
android:id="@+id/text"
android:maxLength="10"
android:textSize="14sp"
android:ellipsize="end"
android:maxLines="1"
android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
android:background="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
maxLength用于限制输入字符的个数,先对文本进行截取,再填入控件,所以不支持省略号的缩进。使用maxLength,汉字,英文字母,标点以及空格都占一位。如下图所示,为maxLength为10的效果:
图2
图3
android:maxEms
<TextView
android:id="@+id/text"
android:maxEms="10"
android:textSize="14sp"
android:ellipsize="end"
android:maxLines="1"
android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
android:background="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
maxEms支持省略号的缩进。
Ems比较像一种单位或者权重,比如maxEms设为10时,大概可以展示20个英文字符,10个中文字符(中英文不同的标点符号权重不同,比如英文逗号可以展示将近50个,但中文逗号只能展示10个,而英文的*号可以展示20个)。但实际上也并非一一对应的,下文为maxEms的具体定义,可知其实并不好控制:
maxEms=”10” 限制TextView的最大宽度为10个大写M的字符宽度。em是一个印刷排版的单位,表示字宽的单位。 em字面意思为:equal M(和M字符一致的宽度为一个单位)简称em。ems是em的复数表达。