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>
Ответы
Ответ 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"/>