【问题标题】:Android How to get rid of question mark at end of ellipsizeAndroid 如何去掉椭圆末尾的问号
【发布时间】:2011-04-26 18:01:52
【问题描述】:

我已经定义了以下 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"/>

正如预期的那样,如果文本太长,文本将被截断并替换为“...”。但是在这三个点的末尾出现了一个被正方形包围的问号。

我怎样才能去掉这个问号?

谢谢!

【问题讨论】:

  • 您在 TextView 中放置了什么文本?听起来像是编码错误

标签: android user-interface textview


【解决方案1】:

one of my books引用我自己的话:

Android 的 TextView 类具有“椭圆化”文本的内置功能, 如果文本长于可用文本,则截断它并添加省略号 空间。例如,您可以通过 android:ellipsize 属性使用它。 这工作得相当好,至少对于单行文本。

Android 使用的省略号不是三个句点。相反,它使用了一个实际的 省略号字符,其中三个点包含在一个字形中。 因此,您使用的任何字体也使用“省略号”功能将 需要省略号字形。

不过,除此之外,Android 还填充了呈现在 - 屏幕,使得长度(以字符为单位)前后相同 “省略”。为了实现这一点,Android 将一个字符替换为 省略号,并用 Unicode 替换所有其他已删除的字符 字符“零宽度无间断空间”(U+FEFF)。这意味着 省略号后的“额外”字符不占用任何可见空间 屏幕,但它们可以是字符串的一部分。

但是,这意味着您用于 TextView 小部件的任何自定义字体 你使用 android:ellipsize 也必须支持这个特殊的 Unicode 特点。并非所有字体都可以,您会在屏幕上看到伪影 如果您的字体缺少此字符,则表示您的缩短字符串 (例如,流氓 X 出现在行尾)。

【讨论】:

  • 天哪,我应该读完整本书 ;-) 谢谢你的提示!
  • @GabrielWeis:哈!我选择引用这句话,只是因为解释起来很痛苦,而且我不想再写一遍。假设您有权对您的字体文件大惊小怪,那么拥有字体编辑器(以及使用该字体编辑器的专业知识)的人应该能够添加此字形。
  • @CommonsWare:感谢您的解释,但就我而言,我在 HTC Hero (2.1) 上看到了这些伪影,但在 Nexus One(2.2 或更高版本)和三星 Galaxy 上都没有S(2.2或以上)。如果这是与字体相关的问题,那是为什么呢?
  • @Xavi:也许英雄使用了不同的字体。或者他们修改了标准字体并删除了这个字形。
【解决方案2】:

遇到了同样的问题。有 FontForge 知识的人在我的自定义字体中修复了 U+FEFF,现在它们运行良好。他是这样描述他的所作所为的:

“我对Fontforge不好,所以我作弊了。基本上,在Fontforge中打开字体,选择空格字符,ctrl+c复制,然后选择FEFF,ctrl+v粘贴。然后菜单Metrics->设置 Width 并设置为零。然后 File->Generate Fonts。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 2022-11-15
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多