Подтвердить что ты не робот

Ellipsize не работает для textView внутри пользовательского listView

У меня есть listView с настраиваемыми объектами, определенными в xml-макете ниже. Я хочу, чтобы textView с идентификатором "info" был эллипсирован в одной строке, и я попытался использовать атрибуты

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> 

4b9b3361

Ответ 1

Эллипсизация нарушена (go голосовать за отчет об ошибке, тем более, что они утверждают, что это не воспроизводимо), поэтому вам нужно использовать незначительный взлом. Использование:

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

на все, что вы хотите эллипсизировать. Кроме того, не используйте singleLine, он устарел.

UPDATE:

При ближайшем рассмотрении проблема, с которой вы сталкиваетесь, заключается в том, что ваш стол расширяется с правой стороны экрана. Изменение определения 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

Без использования устаревших свойств следующие строки отлично работают для меня

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

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

Ответ 3

У меня были те же результаты, что и Стив:

Android: ellipsize = "бегущая строка" андроид: scrollHorizontally = "истина" android: lines = "1"

отлично работает

Ответ 4

попробовать...

то есть.

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

поскольку выделение только работает, когда вид выбран или сфокусирован в соответствии с комментарием № 2 на http://code.google.com/p/android/issues/detail?id=5364

Ответ 5

После проверки этих 3-х проблем (закрытых и повторно открытых) и предыдущих сообщений, я думаю, что ключ состоит в том, чтобы обернуть TextView внешним LinearLayout (или любым другим макетом, который вы используете), и установить " layout_width" малой ширины макета SMALLER, чем длина текста, содержащаяся в TextView. Кажется, что ширина LIMIT, чтобы "android: эллипсис" вел себя правильно.

Следуйте советам в этой проблеме, добавив все эти атрибуты для взлома, я также установил layout_width внешнего LinearLayout на 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 или TextView в Адаптере списка.

Вот мой скриншот для результата!

hope it helps ^^

Ссылка на эти 3 вопроса:

проблема 882

issue 10554

issue 31229

Ответ 6

Я нашел где-то эти атрибуты

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

он отлично работает для меня (Android 1.5)

Ответ 7

Для меня этот атрибут работал. Я тестировал API 8 и далее

В XML

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

Программного

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

Ответ 8

Если вы поместили TextView в пользовательскую группу ViewGroup, убедитесь, что ее снова измерили, если вы изменили измерение после измерения.

Например, я вычислил новое измерение в onLayout. Перед вызовом child.layout вызовите

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

Ответ 9

У меня была такая же проблема в карточке просмотра recycler. Я решил это, добавив следующий код:

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