Android ellipsize的小问题介绍
程序员文章站
2023-12-09 15:34:09
使用textview的时候,需要长度过长自动显示省略号,android里有原生的支持,定义如下: 复制代码 代码如下:
使用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。
复制代码 代码如下:
<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。
推荐阅读
-
Android ellipsize的小问题介绍
-
两分钟让你彻底明白Android Activity生命周期的详解(图文介绍)
-
Android开发笔记之:返回键的复写onBackPressed()介绍
-
Android ListView列表控件的介绍和性能优化
-
android startActivityForResult的使用方法介绍
-
android TextView属性的详细介绍 分享
-
Android中的Adapter简单介绍
-
Android Studio 通过登录功能介绍SQLite数据库的使用流程
-
Android Retrofit的简单介绍和使用
-
在android开发中进行数据存储与访问的多种方式介绍