28

我有一个列表视图,其中包含由下面的 xml 布局定义的自定义对象。我希望 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> 

4

9 回答 9

40

在不使用不推荐使用的属性的情况下,以下几行对我来说非常有用

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

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

于 2010-12-04T21:41:54.160 回答
24

Ellipsize 已损坏(对错误报告进行投票,特别是因为他们声称它不可重现),因此您必须使用小技巧。采用:

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.

于 2009-09-15T01:32:32.607 回答
7

我得到了和史蒂夫一样的结果:

android:ellipsize="marquee" android:scrollHorizo​​ntally="true" android:lines="1"

完美运行

于 2010-11-18T01:32:18.573 回答
4

尝试...

IE

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 选择或聚焦视图时有效

于 2010-04-02T19:01:57.203 回答
1

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

按照这个问题的提示,在添加了所有这些属性进行黑客攻击后,我还将外部 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 中使用它都有效。

这是我的结果截图!

希望对你有帮助^^

这三个问题的参考:

第882期

问题 10554

问题 31229

于 2012-10-23T15:08:07.330 回答
1

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

例如,我在 onLayout 中计算了新维度。在调用 child.layout 之前,请调用

measureChild(child,
    View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));
于 2015-04-16T21:17:05.120 回答
0

我在某个地方找到了这个属性

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

它对我来说很好用(Android 1.5)

于 2009-09-16T16:07:58.887 回答
0

对我来说,这些属性有效。我在 API 8 及更高版本上进行了测试

在 XML 中

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

以编程方式

setMaxLines(1);
setEllipsize(TruncateAt.END);
setHorizontallyScrolling(true);
于 2015-01-07T08:31:58.900 回答
0

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

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
于 2017-03-09T06:59:01.437 回答