为什么单行中的TextView椭圆形显示“结束”显示框?

时间:2011-06-27 11:22:06

标签: android android-layout android-widget

我在Android中使用TextView,我希望在TextView中以“。”结尾显示1行,但这会在最后给出[]类型框。我不知道为什么?我只是想把这个盒子拿出去,只显示以“......”结尾的文字

TextView shown box at end

更新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”的图片 enter image description here

以下是我在适配器中使用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坦诚地分享他们在这项业务中的成功故事。这个故事将帮助每个人听到意识到没有人是完美的,即使在第二代业务。这是一个流音频文件。

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

6 个答案:

答案 0 :(得分:44)

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 :(得分:6)

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

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

  1. 我安装了“FontLab Studio v5.04”
  2. 打开我的字体
  3. 选择了一个我不打算使用的符号
  4. 菜单 - &gt;字形 - &gt;重命名字形
  5. 将名称和unicode索引从其原始值更改为“FEFF”(感谢CommonsWare)
  6. 双击所选符号,然后删除此符号的所有行。
  7. 菜单 - &gt;文件 - &gt;生成字体 - &gt;另存为otf类型
  8. 结果我得到了更新的字体和问题消失了。

答案 2 :(得分:2)

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

中的代码
textview.settext(content);

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

工作正常。

答案 3 :(得分:1)

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 :(得分:1)

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

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

答案 5 :(得分:0)

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