使用TextView的时候,需要长度过长自动显示省略号,android里有原生的支持,定义如下:
<TextView ... android:ellipsize="end" android:singleLine="true" />
一看确实可以使用,但仔细观察,发现在省略号…的后面有一个方框,类似于出现乱码那种字符,这是为什么呢?
原来android里的ellipsize在处理字符串的时候,如果发现字符串超长,便会把最后一个字符替换为…,不是三个点,而是字体内置的省略号。不管用什么字体,都需要支持这个省略号才能正确显示。APP使用的字体是Mercedes,它支持省略号显示,这里没有问题。问题在于android在处理ellipsize的时候,把一个字符替换为…,把剩下截断的其他字符替换为Unicode的字符“ZERO WIDTH NO-BREAK SPACE” (U+FEFF),这个字符在屏幕上并不会显示出来,但它仍是字符串的一部分。
问题原来出在这里,使用的Mercedes字体不支持这个特殊字符U+FEFF的显示,所以才会出现乱码。解决的方法也很简单,编辑字体文件,把U+FEFF这个字符的宽度设为0。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?