заставить Android TextView обернуть

Я использую GridLayout из библиотеки поддержки. Некоторые ячейки содержат информацию об игроке - я использую Linear Layout с двумя TextView. Мне не удалось получить имя (второе текстовое представление) для переноса.

Текущее поведение:

123
John Cochtousczyon

Желаемое поведение:

123
John
Cochtousczyon

Вот текущее состояние макета ячейки xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
    android:id="@+id/player_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:text="test" />

<TextView
    android:id="@+id/player_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:minLines="2"
    android:scrollHorizontally="false"
    android:text="testing thisout with extra sauce"
    android:textSize="18sp" />

</LinearLayout>

и код, который добавляет его в сетку:

    lp = (GridLayout.LayoutParams) playerCell.getLayoutParams();
    lp.columnSpec = GridLayout.spec(nameCol);
    lp.rowSpec = GridLayout.spec(nameRow);
    playerGrid.addView(playerCell, lp);

В идеале мне нужно решение, которое устанавливает ширину столбца для самой широкой ячейки ПОСЛЕ упаковки имени. Я приблизился к желаемому результату, используя maxEms, но для этого нужно уравновесить наиболее вероятный необходимый предел и допустимое усечение с более длинными именами.

P'r'aps, ничего не остается, кроме как исправить ширину - просто подумал, что попрошу на случай, если все более умные люди, чем я, решат это.


person ssdscott    schedule 02.03.2014    source источник


Ответы (3)


Вот на что я остановился, пока не придет что-нибудь получше:

<TextView
    android:id="@+id/player_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:maxEms="4"
    android:maxLines="2"
    android:text="testing thisout with extra sauce"
    android:textSize="18sp" />

комбинация fill_parent, ellipsize END, maxEms и maxLines меня достаточно близко.

person ssdscott    schedule 02.03.2014

Надеюсь, это кому-то поможет; Я просто использовал старый добрый "\ n", чтобы обернуть.

person Karuhanga    schedule 21.09.2017
comment
Спасибо за предложение ... в этом случае у меня есть предварительно созданная строка, поэтому у меня нет возможности вставить CRLF - person ssdscott; 22.09.2017

Если кто-то все еще ищет это в 2020 году, у Android теперь есть встроенный способ сделать это. Просто добавьте этот код в свой java файл

TextviewCompat.setAutoSizeTypeWithDefaults(<your textview refernce here>, TextviewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

Также убедитесь, что вы добавили это в свой текстовый xml

android:ellipsize="none"
person Shivam Bhasin    schedule 24.06.2020