Текст Android TextView не обернут

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

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

<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>

Ответ 1

Я сам его исправил, ключ 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> 

Ответ 2

Единственным правильным ответом на этот вопрос является то, что вам нужно установить правильную ширину родителей (в данном случае 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));

Ответ 3

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

  • android:ellipsize="none": текст не разрезается на ширину текста

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

Ответ 4

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

android:singleLine="false".

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

Все самое лучшее!

Ответ 5

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

Попробуйте что-нибудь подобное, если работаете со столами.

            <TableLayout 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:shrinkColumns="*">

Обратите внимание, что вам нужно shrinkColumns="*"

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

ссылки:

TableLayout

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

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

Ответ 6

В вашем коде неправильный один из параметров компоновки. В первом TextView

android:layout_width="wrap_content"

измените на

android:layout_width="fill_parent" 

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

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

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

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

Ответ 10

Даже если это старый поток, я бы хотел поделиться своим опытом, поскольку это помогло мне. Мое приложение отлично работало для ОС 2.0 и 4.0+, но для телефона HTC, работающего под OS 3.x, текст не был обернут. Что для меня работало, так это включать оба эти тега.

android:maxLines="100"
android:scrollHorizontally="false"

Если вы устранили либо он не работал только для устройства os 3.0. Параметр "эллипсис" имел нейтральный эффект. Вот полный тег textview ниже

<TextView
                android:id="@+id/cell_description"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingTop="5dp"
                android:maxLines="100"
                android:scrollHorizontally="false"
                android:textStyle="normal"
                android:textSize="11sp"
                android:textColor="@color/listcell_detail"/>

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

Ответ 11

Увеличьте высоту i.e.. android: height = "Some size", он отлично работает для меня.

Ответ 12

Я использовал android:ems="23" для решения моей проблемы. Просто замените 23 на лучшее значение в вашем случае.

<TextView
        android:id="@+id/msg"
        android:ems="23"
        android:text="ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab "
        android:textColor="@color/white"
        android:textStyle="bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

Ответ 13

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

Ответ 14

вам нужно использовать теги android:singleLine="false" в ur TextView.

Ответ 15

Я думаю, это зависит от конкретной комбинации макетов на вашем дисплее. Некоторые флаги могут быть переопределены или проигнорированы. У меня есть TabHost с вкладками, каждая вкладка представляет собой список таблиц. Таким образом, это вкладка ListView, каждая строка которой представляет собой TableLayout из TextView. Я попробовал исправления, перечисленные выше, и никто из них не работал.

Ответ 16

Я поместил этот атрибут:

android:inputType="textMultiLine"

в мой TextView, и у него есть строка обертывания, а пользователь может "Enter" для новой строки.

=============================================== =============

Когда вы придете к этому сообщению, вам может понадобиться создать Big TextView, который может отображать несколько строк, чтобы эти атрибуты также могли понадобиться

android:layout_height="Xdp" //where X is a number depends on how big Textview you want
android:gravity="top" //in order to make your text start from the top of your TextView.

Ответ 17

Я знаю, что это правильно, но в моем случае проблема заключалась в установке свойства textSize в 'dp' - я изменил его на "sp", и он отлично работает.

Ответ 18

В моем случае при расписании TableRow > ScrollView > TextView я решил проблему, установив android:layout_width на fill_parent на TableRow и на wrap_content на ScrollView и TextView.

Ответ 19

Мне удалось добавить несколько пикселей в высоту TextView, чтобы решить эту проблему.

Сначала вам нужно получить высоту TextView. Это не просто, потому что оно 0 до того, как оно уже нарисовано.

Добавьте этот код в onCreate:

mReceiveInfoTextView = (TextView) findViewById(R.id.receive_info_txt);
if (mReceiveInfoTextView != null) { 
    final ViewTreeObserver observer = mReceiveInfoTextView.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int height = mReceiveInfoTextView.getHeight();
            int addHeight = getResources().getDimensionPixelSize(R.dimen.view_add_height);
            mReceiveInfoTextView.setHeight(height + addHeight);

            // Remove the listener if possible
            ViewTreeObserver viewTreeObserver = mReceiveInfoTextView.getViewTreeObserver();
            if (viewTreeObserver.isAlive()) {
                viewTreeObserver.removeOnGlobalLayoutListener(this);
            }
        }
    });
}

Вам нужно добавить эту строку в dimens.xml

<dimen name="view_add_height">10dp</dimen>

Надеюсь, что это поможет.

Ответ 20

Я только что удалил android:lines="1" и добавил android:maxLines="2", это автоматически обернуло текст. Проблема заключалась в атрибуте android:lines. Это приводит к обертке текста не.

Мне не нужно было использовать maxEms или singleLine="false" (устаревший API), чтобы исправить это.

Ответ 21

Я добавил a\n в середине моей строки, и все выглядело нормально.

Ответ 22

Я потратил часы, чтобы понять, что в тексте, который я пытался отобразить, содержалась одна цитата (в файле string.xml), поэтому я просто избежал ее с обратной косой чертой, и она отлично работала = > высота в TextView было правильно обертывание текста:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-smallcaps"
        android:text="@string/instructions"
        android:textAlignment="center"
        android:textSize="18sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/keyword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/defaultKeyword"
        android:textSize="22sp"
        />

Ответ 23

Чтобы обернуть текст и поместить текст в следующую строку, мы sholud используем символ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\