【问题标题】:Why does TextView in single line elipsized with "end" show boxes?为什么 TextView 在单行省略了“结束”显示框?
【发布时间】:2011-09-23 10:33:05
【问题描述】:

我在 Android 中使用 TextView,我想在 TextView 中显示以“.”结尾的 1 行,但这会在末尾给出 [] 类型框。我不知道为什么?我只想删除这个框,只显示以“...”结尾的文本

更新 list_row.xml 的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="85dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:cacheColorHint="#4C7B8D"
android:background="#4C7B8D">
<ImageView
    android:id="@+id/videoListImage"
    android:src="@drawable/audio_thumbnail60x60"
    android:layout_height="75dp"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    android:scaleType="fitXY"
    android:layout_width="75dp"
    android:padding="4dp"
    android:background="@color/light_gray" />
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginRight="5dp"
        android:layout_toLeftOf="@+id/next_arrow"
        android:orientation="vertical"
        android:gravity="center_vertical"
        android:paddingLeft = "5dp">
        <TextView
            android:id="@+id/row_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textColor="@color/app_background_color"
            android:textSize="18sp"
            android:ellipsize="end"             
            android:maxLines="1" />
        <TextView
            android:id="@+id/row_dis"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textColor="@color/color_black"
            android:layout_marginRight="2dp"
            android:textSize="15sp"
            android:ellipsize="end"
            android:maxLines="1" />
        <TextView
            android:text="$7.50"
            android:id="@+id/audio_price_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="16dp"
            android:textColor="@color/color_white"
            android:textStyle = "bold"
            android:paddingLeft = "12dp"
            android:paddingRight = "12dp"
            android:background="@drawable/blue_round_cornor_background" />
    </LinearLayout>
    <ImageView
        android:id="@+id/next_arrow"
        android:src="@drawable/next_arrow"
        android:layout_toLeftOf="@+id/saved_purchased"
        android:scaleType="fitXY"
        android:layout_height="25dp"
        android:layout_width="18dp"
        android:layout_centerVertical="true"
        android:visibility = "gone"/>
    <ImageView
        android:id="@+id/saved_purchased"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop ="true"
        android:scaleType="fitXY"
        android:layout_height="25dp"
        android:layout_width="25dp"
        android:layout_marginRight="2dp"/>
</RelativeLayout>

这是“next_arrow”的图片

这是我在适配器中使用 getView() 的代码。

  String discription = listData.getDescription();
    if (discription != null && discription.length() > 0) {
        if (textViewDis != null) {
            textViewDis.setTypeface(titleFont);
            Log.e("data", ""+discription);
            discription.replaceAll("\r\n", "");
            textViewDis.setText(discription);
        }
    }

这是要显示的实际描述字符串。

Andrew 和 Stephanie Tidwell 坦率地分享了他们在这项业务中的成功故事。这个故事将帮助每个倾听的人意识到没有人是完美的,即使在第二代企业中也是如此。这是一个流式音频文件。

还有问题吗?我可以更新更多问题。

【问题讨论】:

  • 我认为您的布局没有任何问题。 TextView 的价值从何而来?是否有可能以某种方式在字符串上附加回车/换行符号?
  • 哦,是的,这可能是个问题……我不想考虑。如何解决?
  • 尝试将String.replaceAll("\r\n", "") 应用于您的字符串。

标签: android android-layout android-widget


【解决方案1】:

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

Android 的 TextView 类具有“椭圆化”文本的内置功能, 如果文本长于可用文本,则截断它并添加省略号 空间。例如,您可以通过 android:ellipsize 属性使用它。 这工作得相当好,至少对于单行文本。 Android 使用的省略号不是三个句点。相反,它使用了一个实际的 省略号字符,其中三个点包含在一个字形中。 因此,您使用的任何字体也使用“省略号”功能将 需要省略号字形。

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

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

【讨论】:

  • 非常感谢先生抽出宝贵时间。我得到了它。但是如何解决这个问题呢?你解决了吗?
  • @Arslan:使用内置字体。或者,修复字体以包含丢失的 U+FEFF 字形。或者,使用已有此字形的字体。
  • @Manu-iAndyDev :是的,我更改了字体。您也可以使用内置字体。
【解决方案2】:

我在尝试使用自定义“MetaPro-Medium.otf”作为TextView 的字体时遇到了同样的问题 android:singleLine="true"。 字符串末尾的框真的很烦人。

我没有发现如何在 Android 中解决这个问题,但同时找到了以下解决方法。

  1. 我已经安装了“FontLab Studio v5.04”
  2. 打开我的字体
  3. 选择了我不打算使用的符号之一
  4. 菜单->字形->重命名字形
  5. 将名称和 unicode 索引从原来的值更改为“FEFF”(感谢 CommonsWare)
  6. 双击所选符号,然后删除创建此符号的所有行。
  7. 菜单->文件->生成字体->另存为otf类型

结果我得到了更新的字体并且问题消失了。

【讨论】:

    【解决方案3】:

    Arslan,你的布局在我的情况下工作正常,我已经测试过:

     <TextView
        android:id="@+id/row_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textSize="18sp"
        android:ellipsize="end"             
        android:maxLines="1"
        android:text="This is the demo testing demo testing This is the demo testing demo testing"/>
    

    ... 并获得您想要的确切输出“一行以...结尾”并且应该删除框。所以我认为您设置的任何字符或文本都可能有问题。

    【讨论】:

    • 感谢您的宝贵时间。让我再检查一遍。我这个“>”图像可能会导致问题。
    【解决方案4】:

    当我尝试显示来自 webservice url 的内容时,我遇到了一些特殊符号的相同问题(显示框([])),即使我不使用 android:ellipsize。然后我替换代码来自

    textview.settext(content);
    

    textview.settext(Html.fromHtml(content));
    

    工作正常。

    【讨论】:

    • 不知道为什么这对我不起作用。有没有什么特别的时间你设置textview是在onCreate中吗?
    【解决方案5】:

    实际上我遇到了这个问题,我没有更改字体或使用 setText,而是将 scrollHorizo​​ntally 添加为 false 并修复了额外的框字符

    android:singleLine="true"
    android:scrollHorizontally="false"
    android:ellipsize="end"
    

    【讨论】:

    • 我重新编译后,似乎这个解决方案不起作用。起作用的是不使用椭圆形。到目前为止,我发现完成这项工作的唯一方法是编辑字体。我没有 Fontlab Studio,也买不起 900 美元。所以我暂时将其删除,稍后制作我自己的 ellipsize 版本。
    【解决方案6】:

    在我的项目中遇到了类似的问题,我在文本视图中使用了字体类型。很少有字体类型有这些使 ... 最后显示为 [] 的问题。如果您尝试更改字体,问题将得到解决。

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多