ListView: несколько строк в одном элементе

Интерфейс, диалоги, темы, стили, меню
Ответить
Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

ListView: несколько строк в одном элементе

Сообщение Idol » 26 июл 2013, 05:03

Есть список, в котором каждый элемент использует следующий формат:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:measureWithLargestChild="true"
    android:paddingBottom="5dip"
    android:paddingTop="5dip" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="5dip"
        android:ellipsize="end"
        android:layout_weight="1"

        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@android:id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"

        android:layout_marginRight="5dip"
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:layout_gravity="right" 
        />
</LinearLayout>
Вопрос: как сделать, чтобы когда в text1 слишком длинный текст, текст переносился на вторую строку, а не оканчивался троеточием, как сейчас?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: ListView: несколько строк в одном элементе

Сообщение rezak90 » 26 июл 2013, 07:56

меньше копипастом заниматься нужно, если копируете то читайте хотя бы за что отвечает каждый атрибут, за ставку троеточия отвечает android:ellipsize="end"
R.id.team
Политика на форуме запрещена

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

Re: ListView: несколько строк в одном элементе

Сообщение Idol » 27 июл 2013, 01:39

rezak90 писал(а):меньше копипастом заниматься нужно, если копируете то читайте хотя бы за что отвечает каждый атрибут, за ставку троеточия отвечает android:ellipsize="end"
Похоже, я опять спросил как то не так :).

Я понимаю, что делает данный скрипт.
Мне надо, чтобы текст переносился, создавая второю строчку, а не обрывался (как в случае, если я уберу ellipsize).

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: ListView: несколько строк в одном элементе

Сообщение Foenix » 27 июл 2013, 01:55

за это отвечает параметр wrap_content - Сворачивать содержимое, переносить на другую строчку.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

Re: ListView: несколько строк в одном элементе

Сообщение Idol » 29 июл 2013, 06:22

Foenix писал(а):за это отвечает параметр wrap_content - Сворачивать содержимое, переносить на другую строчку.
Не уловил, и что же надо изменить в данном примере, чтобы переносилось?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: ListView: несколько строк в одном элементе

Сообщение Foenix » 29 июл 2013, 08:32

Если установлен этот парамет по высоте, то содержимое будет переноситься на другую строчку. При этом нужно установить, как-то зафиксировать ширину объекта.
Если ты уберешь параметр (с эллипсом) то должно переноситься.
А вот за второй текствью - не уверена.
У тебя на первый LinearLayout не ругается эклипс? там вообще-то не установлена его ориентация, поэтому я не знаю как у тебя будут эти вьюшки вообще располагаться.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

Re: ListView: несколько строк в одном элементе

Сообщение Idol » 30 июл 2013, 07:41

Foenix писал(а):Если установлен этот парамет по высоте, то содержимое будет переноситься на другую строчку. При этом нужно установить, как-то зафиксировать ширину объекта.
Если ты уберешь параметр (с эллипсом) то должно переноситься.
А вот за второй текствью - не уверена.
У тебя на первый LinearLayout не ругается эклипс? там вообще-то не установлена его ориентация, поэтому я не знаю как у тебя будут эти вьюшки вообще располагаться.
Один из вариантов. Не работает, просто обрезает строку.

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="5dip"
    android:paddingTop="5dip" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="5dip"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:width="30dp" />

    <TextView
        android:id="@android:id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="5dip"
        android:layout_weight="0"
        android:gravity="right"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>
Здесь человек хочет, как раз наоборот, чтобы не переносило.
Может проблема, в том что это кастомный адаптер и где там надо, что-то подкрутить?

Горизонтальная ориентация по умолчанию, так что работает без проблем (в этой части).

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: ListView: несколько строк в одном элементе

Сообщение Mikhail_dev » 30 июл 2013, 08:39

Может еще один LinearLayout нужен? Такая конструкция, к примеру, не обрезает параметр tvPlaceTitle
[syntax=xml]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tvPlaceTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text=""
android:textSize="20sp">
</TextView>
<TextView
android:id="@+id/tvPlaceAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="10dp"
android:textSize="14sp"
android:text="">
</TextView>
</LinearLayout>
</LinearLayout>
[/syntax]

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: ListView: несколько строк в одном элементе

Сообщение Foenix » 30 июл 2013, 14:52

не xml а какая-то ерунда, вот честно, что за ширина такая 30дп? И зачем тебе параметр width?
Сотри все это и сделай заново.
Или хотя бы покажи рисунком - какого расположения этих двух несчавстных textview ты хочешь добиться.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

Re: ListView: несколько строк в одном элементе

Сообщение Idol » 31 июл 2013, 02:58

Спасибо no--, но твой совет не помог.

Заработало только при следующем раскладе:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="5dip"
    android:paddingTop="5dip" >

    <TextView
        android:id="@+id/textName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="5dip"
        android:layout_weight="1"
        android:maxLines="3"
        android:scrollHorizontally="false"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|center_vertical"
        android:layout_marginRight="5dip"
        android:layout_weight="0"
        android:gravity="right"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>
Важные строки:

Код: Выделить всё

        android:maxLines="3"
        android:scrollHorizontally="false"
Всем спасибо за участие и наводки.

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

Re: ListView: несколько строк в одном элементе

Сообщение Idol » 13 авг 2013, 01:56

Idol писал(а):Есть список, в котором каждый элемент использует следующий формат:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:measureWithLargestChild="true"
    android:paddingBottom="5dip"
    android:paddingTop="5dip" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="5dip"
        android:ellipsize="end"
        android:layout_weight="1"

        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@android:id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"

        android:layout_marginRight="5dip"
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:layout_gravity="right" 
        />
</LinearLayout>
Вопрос: как сделать, чтобы когда в text1 слишком длинный текст, текст переносился на вторую строку, а не оканчивался троеточием, как сейчас?
Может кому пригодится. Этот код будет работать только на старых версиях, чтобы работал в новых нужно добавить

Код: Выделить всё

android:maxLines="1"

Mykola
Сообщения: 132
Зарегистрирован: 26 июл 2013, 12:06

Re: ListView: несколько строк в одном элементе

Сообщение Mykola » 13 авг 2013, 09:16

Дык при таком раскладе)), больше чем 3 строки он у тебя не покажет (остальной текст обрежет). Сделай 2 столбика LinearLayout и растяни TextView по высоте и ширине.

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

Re: ListView: несколько строк в одном элементе

Сообщение Idol » 14 авг 2013, 01:48

Mykola писал(а):Дык при таком раскладе)), больше чем 3 строки он у тебя не покажет (остальной текст обрежет). Сделай 2 столбика LinearLayout и растяни TextView по высоте и ширине.
А мне больше и не надо, а другие могут указать хоть 33, если требуется. Это не означает, что всегда будет 33 строки.

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

Re: ListView: несколько строк в одном элементе

Сообщение Idol » 14 авг 2013, 01:58

Idol писал(а):
Idol писал(а):Есть список, в котором каждый элемент использует следующий формат:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:measureWithLargestChild="true"
    android:paddingBottom="5dip"
    android:paddingTop="5dip" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="5dip"
        android:ellipsize="end"
        android:layout_weight="1"

        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@android:id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"

        android:layout_marginRight="5dip"
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:layout_gravity="right" 
        />
</LinearLayout>
Вопрос: как сделать, чтобы когда в text1 слишком длинный текст, текст переносился на вторую строку, а не оканчивался троеточием, как сейчас?
Может кому пригодится. Этот код будет работать только на старых версиях, чтобы работал в новых нужно добавить

Код: Выделить всё

android:maxLines="1"
Уточнение.
К сожаление, данный скрипт не будет работать во всех версиях. Причем результат не предсказуем. Скажем, у меня работает в 2.3 и 4.2 (хотя не во всех случаях), а в 4.0 не пашет как надо. Это очередной баг. Хотя вроде они его пофиксили недавно (23.06.2013). Может мне мой софт надо обновить, однако проверял на реальном телефоне со всеми официальными обновлениями.
Решение проблемы (надеюсь временное), добавить устаревшую инструкцию :

Код: Выделить всё

android:singleLine="true"

Ответить