今天遇到一个问题,
<TextView
android:id="@+id/tv_bed_doctor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:maxEms="5"
android:ellipsize="end"
android:textSize="@dimen/px20"
android:includeFontPadding="false"
android:text=""
/>
其中,父宽度为120dp+, 根据代码的意思,就是显最多显示5个字,如果还有的话,后面会显示...
但是实际情况上,如果是6个字,却可以显示完全,这是为什么呢?
android:maxEms="5"
是用来指定 TextView 最多可以显示的字符数(而不是字数)。但是,maxEms
属性是基于字体的宽度,而不是基于字符数。
在某些情况下,如果使用的是等宽字体(比如 Monospace 字体),每个字符的宽度是相同的。但是在大多数情况下,字体的宽度是不等的,一些字符可能比其他字符更宽。
因此,如果你设置了 maxEms="5"
,并且你的文本包含了6个字符,但这6个字符的总宽度仍然可以适应 TextView 的宽度,那么这6个字符将全部显示出来。只有当字符的总宽度超过了 TextView 的宽度时,才会根据设置的 maxEms
属性进行截断。
这种行为是符合预期的,因为 maxEms
控制的是字符的宽度,而不是字符的数量。
好吧,理解错了...
同时,我们知道maxLength 代表的是最大的长度,然后只显示当前的长度...
所以,如何解决这个问题呢,这里的宽度我们采用的是android:layout_width="wrap_content",这里,可以根据字体的宽高设置一个差不多的就可以了,比如
<TextView
android:id="@+id/tv_bed_doctor"
android:layout_width="@dimen/px115"
android:layout_height="wrap_content"
android:maxLines="1"
android:maxEms="5"
android:ellipsize="end"
android:textSize="@dimen/px20sp"
android:includeFontPadding="false"
android:text=""
/>
可以解决以上问题...