Android TextView Текст не переносится - PullRequest
74 голосов
/ 04 февраля 2010

Может кто-нибудь сказать мне, что не так с текстом?Текст, длина которого превышает одну строку, не переносится на следующую строку, но выходит за пределы экрана.

Ниже приведен код:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:padding="4dip">

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

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:padding="4dip">
            <TextView 
                android:id="@+id/reviewItemEntityName"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:text="event/venue" 
                android:textColor="@color/maroon"
                android:singleLine="true" 
                android:ellipsize="end" 
                android:textSize="14sp"
                android:textStyle="bold" 
                android:layout_weight="1" />

            <ImageView 
                android:id="@+id/reviewItemStarRating"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignParentBottom="true"
                android:src="@drawable/title_1_star" />
        </LinearLayout>

        <TextView 
            android:id="@+id/reviewItemDescription"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:text="Description comes here" 
            android:textSize="12sp" 
            android:layout_weight="1"/>
    </LinearLayout>
</LinearLayout>

Ответы [ 24 ]

77 голосов
/ 04 февраля 2010

Я сам исправил, ключ android:width="0dip"

<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="4dip"
    android:layout_weight="1">

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="4dip">

        <TextView
            android:id="@+id/reviewItemEntityName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/maroon"
            android:singleLine="true"
            android:ellipsize="end"
            android:textSize="14sp"
            android:textStyle="bold"
            android:layout_weight="1" />

        <ImageView
            android:id="@+id/reviewItemStarRating"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentBottom="true" />
        </LinearLayout>

        <TextView
            android:id="@+id/reviewItemDescription"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:width="0dip" />

    </LinearLayout>

    <ImageView
        android:id="@+id/widget01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/arrow_nxt"
        android:layout_gravity="center_vertical"
        android:paddingRight="5dip" />

</LinearLayout> 

40 голосов
/ 31 августа 2011

Единственный правильный ответ на этот вопрос заключается в том, что вам нужно установить для родителей нужную ширину (в данном случае FILL_PARENT, WRAP_CONTENT) и использовать android:layout_weight=1 для просмотра текста, который необходимо обернуть.

SingleLine включено по умолчанию, чтобы не вносить никаких изменений.

A width, установленный на 0px, будет работать, но не является хорошим решением.

Пример (на этот раз в виде таблицы) с использованием xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">
    <TableLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:stretchColumns="*"
        android:id="@+id/tableLayout1">
        <TableRow android:id="@+id/tableRow1" android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <TextView android:text="test1" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:layout_weight="0" />
            <TextView android:layout_weight="1"
                android:text="test2 very long text that needs to be wrapped properly using layout_weight property and ignoring singleline since that is set by default..."
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
        </TableRow>     
    </TableLayout>
</LinearLayout>

Если вы хотите установить это в коде, вы ищете layout_weight в качестве третьего параметра, как в этом примере, где он установлен в 1:

row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
TextView label = new TextView(getApplicationContext());
label.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT, 1f));
19 голосов
/ 02 марта 2011

Вы должны использовать 2 параметра:

  • android:ellipsize="none": текст не обрезается по ширине просмотра текста

  • android:scrollHorizontally="false" текст переносится на столько строк, сколько необходимо

12 голосов
/ 21 мая 2013

Достаточно использовать в вашем XML-файле.

android:singleLine="false".

Надеюсь, это сработает.

Всего наилучшего!

10 голосов
/ 24 июня 2011

Я не смог заставить работать ни одно из этих решений при использовании TableLayout>TableRow>TextView.Затем я нашел TableLayout.shrinkColumns="*".Единственное другое решение, которое сработало, - принудительное использование TextView для layout_width:250px и т. Д., Но мне не нравится принудительное принудительное изменение ширины.

Попробуйте что-то подобное, если работаете с таблицами.Обратите внимание, вам нужно shrinkColumns="*"

Это, очевидно, в пределах <LinearLayout>.Так что-то вроде <LinearLayout> <TableLayout> <TableRow> <TextView>

ссылки:

TableLayout

http://code.google.com/p/android/issues/detail?id=4000

Надеюсь, что кому-то поможет.

4 голосов
/ 25 февраля 2010

Один из ваших параметров макета неверен в вашем коде.В первом TextView

android:layout_width="wrap_content"

измените на

android:layout_width="fill_parent" 

Текст, который вне размера ширины экрана будет перенесен на следующую строку и установлен android:singleline="false".

3 голосов
/ 21 марта 2011

Установите высоту текстового представления android:minHeight="some pixes" или android:width="some pixels". Это решит проблему.

3 голосов
/ 27 октября 2013

В моем случае удаление типа ввода сработало, я использовал android: inputType = "textPostalAddress" из-за того, что мое текстовое представление было прикреплено к одной строке и не было переносом, устранение этой проблемы решило.

2 голосов
/ 18 декабря 2011

Я новичок в Android (и GUI), но у меня большой опыт работы с программным обеспечением.Я прошел несколько уроков, и это мое понимание:

layout_width и layout_height являются атрибутами TextView.Это инструкции о том, как TextView должен формировать себя, они не относятся к тому, как обрабатывать контент в TextView.

Если вы используете «fill_parent», вы говорите, что TextView должен формировать себя относительноэто родительское представление, оно должно заполнить его.

Если вы используете "wrap_content", вы говорите, что вам следует игнорировать родительское представление и позволить содержимому TextView определять его форму.

Я думаю, что это запутанный момент.«wrap_content» не говорит TextView, как управлять его содержимым (для переноса строк), он говорит ему, что он должен формировать себя относительно своего содержимого.В этом случае без символов новой строки он формирует себя так, что весь текст находится на одной строке (которая, к сожалению, переполняет родительский элемент).

Я думаю, вы хотите, чтобы родительский элемент был заполнен горизонтально, иобернуть содержимое вертикально.

1 голос
/ 04 июня 2015

У меня была похожая проблема, когда мои два горизонтально-взвешенных TextViews не переносили текст. Позже я узнал, что проблема была в том, что у моего родителя viewparent вместо match_parent было wrap_content.

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