Размер эллипса не работает для textView внутри пользовательского listView - PullRequest
27 голосов
/ 15 сентября 2009

У меня есть 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> 

Ответы [ 9 ]

40 голосов
/ 05 декабря 2010

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

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

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

24 голосов
/ 15 сентября 2009

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

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.

7 голосов
/ 18 ноября 2010

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

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

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

4 голосов
/ 02 апреля 2010

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

т.е.

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

1 голос
/ 23 октября 2012

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

Следуйте подсказке в этой проблеме , после добавления всех этих атрибутов для взлома я также установил 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

выпуск 10554

выпуск 31229

0 голосов
/ 09 марта 2017

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

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
0 голосов
/ 17 апреля 2015

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

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

measureChild(child,
    View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));
0 голосов
/ 07 января 2015

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

В XML

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

Программный

setMaxLines(1);
setEllipsize(TruncateAt.END);
setHorizontallyScrolling(true);
0 голосов
/ 16 сентября 2009

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

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

у меня нормально работает (Android 1.5)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...