我已经定义了以下TextView:
<TextView
android:id="@+id/textview_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_alignParentTop="true"
android:layout_marginRight="25dip"
android:ellipsize="end"/>
正如预期的那样,如果文本太长而被“......”取代,则文本被截断。但在三点结束时出现一个被正方形包围的问号。
如何摆脱这个问号?
谢谢!
答案 0 :(得分:35)
从one of my books引用自己:
Android的
TextView
类具有“ellipsize”文本的内置功能, 截断它并在文本长于可用时添加省略号 空间。例如,您可以通过android:ellipsize
属性使用此属性。 这种方法效果很好,至少对于单行文本而言。Android使用的省略号不是三个句点。而是使用实际的 省略号字符,其中三个点包含在单个字形中。 因此,您使用的任何字体也使用“椭圆化”功能 需要省略号字形。
除此之外,Android还会填充以下内容呈现的字符串 - 屏幕,使得长度(以字符为单位)前后相同 “ellipsizing”。为了使这项工作,Android用一个字符替换一个字符 省略号,并用Unicode替换所有其他删除的字符 字符'ZERO WIDTH NO-BREAK SPACE'(
U+FEFF
)。这意味着 省略号后面的“额外”字符不会占用任何可见空间 屏幕,但它们可以成为字符串的一部分。但是,这意味着您用于
TextView
小部件的任何自定义字体 与android:ellipsize
一起使用时,也必须支持这种特殊的Unicode 字符。并非所有字体都可以,并且您将在屏幕上获得工件 如果您的字体缺少此字符,则表示缩短的字符串 (例如,流氓X出现在行尾)。
答案 1 :(得分:9)
有同样的问题。有FontForge知识的人修复了我的自定义字体中的U + FEFF,现在它们运行良好。以下是他如何描述他的所作所为:
“我对Fontforge并不擅长,所以我作弊。基本上,在Fontforge中打开字体,选择空格字符,ctrl + c进行复制,然后选择FEFF,ctrl + v进行粘贴。然后菜单Metrics-&gt ;设置宽度并设置为零。然后文件 - >生成字体。“