Ellipsize不适用于自定义listView中的textView

时间:2009-09-14 22:49:58

标签: xml android textview

我有一个listView,下面是xml-layout定义的自定义对象。我希望带有id“info”的textView在一行上进行椭圆化,我尝试使用属性

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

没有成功。

如果我将layout_width设置为固定宽度,例如

android:layout_width="100px"

文字被截断了。但出于便携性原因,这不是一个可接受的解决方案。

你能发现问题吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5px"
>
<TextView  
android:id="@+id/destination"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="22dp"
android:paddingLeft="5px"
/>

<TextView  
android:id="@+id/date"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="15dp"
android:paddingLeft="5px"
/>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/info_table"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5px"
android:paddingTop="10px" 
>
    <TableRow>
        <TextView
            android:id="@+id/driver_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/driver_label" />
        <TextView
            android:id="@+id/driver" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/passenger_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/passenger_label" />
        <TextView
            android:id="@+id/passengers" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/info_label"
            android:gravity="right"
            android:paddingRight="5px" 
            android:text="@string/info_label"/>
        <TextView
            android:id="@+id/info"
            android:layout_width="fill_parent"
            android:singleLine="true"
            android:ellipsize="end" />
    </TableRow>
</TableLayout> 

9 个答案:

答案 0 :(得分:40)

如果不使用已弃用的属性,以下行对我来说非常有用

android:ellipsize="end" 
android:lines="1"
android:scrollHorizontally="true"

ref http://code.google.com/p/android/issues/detail?id=882#c9

答案 1 :(得分:24)

Ellipsize被破坏了(去vote on the bug report,特别是因为他们声称它不可复制)所以你必须使用一个小的黑客。使用:

android:inputType="text"
android:maxLines="1"

关于你想要的任何东西。另外,不要使用singleLine,它已被弃用。

<强>更新

仔细观察后,您遇到的问题是您的桌子正在屏幕右侧延伸。将您的TableLayout定义更改为:

<TableLayout
    android:id="@+id/info_table"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="5px"
    android:paddingTop="10px"
    android:shrinkColumns="1">

应该解决这个问题,然后执行我上面所说的内容来缩小你的TextView

答案 2 :(得分:7)

我和史蒂夫的结果相同:

机器人:ellipsize = “字幕” 机器人:scrollHorizo​​ntally = “真” android:lines =“1”

完美运作

答案 3 :(得分:4)

尝试...

android:ellipsize="marquee"
android:focusable="true" android:marqueeRepeatLimit="num|marquee_forever"
android:lines="1" android:focusableInTouchMode="true"
android:scrollHorizontally="true"

因为选框仅在根据http://code.google.com/p/android/issues/detail?id=5364

上的评论#2选择或聚焦时有效

答案 4 :(得分:1)

在查看了这3个问题(关闭和重新打开)以及之前的帖子后,我认为关键是用外部LinearLayout(或您正在使用的任何其他布局)包装TextView,并设置“ layout_width “外部布局宽度比TextView中包含的文本长度稍微 SMALLER 。似乎必须 LIMIT 宽度才能使“android:ellipsize”正常运行。

按照this issue中的提示,在添加了所有这些黑客属性之后,我还将外部LinearLayout的layout_width设置为240dp,例如:

<Linearlayout
  android:layout_width="240dp"
  android:layout_height="wrap_content"
  ...>

    <TextView
     ....
     android:singleLine="true"
     android:lines="1"
     android:maxLines="1"
     android:scrollHorizontally="true"
     android:ellipsize="end"
     android:text="this is a text which length should be longer than 240dp"
    />
</LinearLayout>

我可以成功地使TextView的结尾显示“...”,不是很容易接受,但它有效!我认为它适用于常规TextView或List Adapter中的TextView。

这是我的结果屏幕截图!

hope it helps ^^

参考这三个问题:

issue 882

issue 10554

issue 31229

答案 5 :(得分:0)

我找到了这个属性的地方

<TextView ...
android:singleLine="true"
android:ellipsize="marquee" />

它对我来说很好(Android 1.5)

答案 6 :(得分:0)

对我来说,这些属性起作用了。我在API 8及其后续测试

在XML

<TextView
 ....
 android:maxLines="1"
 android:scrollHorizontally="true"
 android:ellipsize="end"
 ....
/>

编程

setMaxLines(1);
setEllipsize(TruncateAt.END);
setHorizontallyScrolling(true);

答案 7 :(得分:0)

如果将TextView放在您创建的自定义ViewGroup中,请确保在测量后更改尺寸时再次测量它。

例如,我计算了onLayout中的新维度。在你打电话给child.layout之前,请致电

measureChild(child,
    View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));

答案 8 :(得分:0)

我在回收商视图卡中遇到了同样的问题。我通过添加以下代码解决了这个问题:

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>