android:maxEms=“5“ 为什么可以显示6个文字呢?

今天遇到一个问题,

复制代码
<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=""
    />

可以解决以上问题...

相关推荐
程序员-珍2 小时前
报错下载android sdk失败
android·java
齊家治國平天下3 小时前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
Xzaveir3 小时前
企业号码展示不可观测怎么办:状态机、拨测事件与异常回放
android·人工智能
2501_916007473 小时前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
黄林晴4 小时前
Nearby Connections 重大变更:不再自动开启 Wi-Fi / 蓝牙,适配指南
android
恋猫de小郭4 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
HLC++17 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼21 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼21 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
壮哥_icon1 天前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化