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

24 ответа:

я исправил это сам, ключ 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> 

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

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

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

некоторый пример (в tableview на этот раз), используя 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));

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

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

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

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

android:singleLine="false".

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

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

Я не мог заставить ни одно из этих решений работать при использовании 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

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

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

android:layout_width="wrap_content"

заменить на

android:layout_width="fill_parent" 

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

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

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

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

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

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

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

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

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

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

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

Если вы исключите либо он не работал только для устройства os 3.0. параметр "ellipsize" имел нейтральный эффект. Вот полный тег 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"/>

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

увеличить высоту, т. е.. android: height= "некоторый размер", он отлично работает для меня.

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

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

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

android:inputType="textMultiLine"

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

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

когда вы придете к этому сообщению, вы можете создать большой 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.

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

Я 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"/>

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

вы должны использовать android:singleLine="false" по УР TextView теги.

мне наконец удалось добавить несколько пикселей на высоту 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>

надеюсь, что это помогает.

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

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

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

Я потратил часы, чтобы выяснить, что в тексте, который я пытался отобразить, содержалась одна кавычка (в строке.xml) поэтому я просто избежал его с обратной косой чертой, и это сработало хорошо = > the высота из 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"
        />

Я использую ограничение макета в основном.

1) android:layout_width="match_parent" = пытается растянуть, чтобы встретить края

2) android:layout_width="wrap_content" = основано исключительно на входном тексте без учета других представлений поблизости. например, добавление android:textAlignment="center" изменить форму текста

3) android:padding="12dp" android:layout_width="0dp" android:layout_weight="1" android:singleLine="false"

= текст будет складываться для размещения соседних макетов без учета самого текста

чтобы обернуть текст и поместить текст в следующую строку, мы sholud используем символ "\n", т. е. новый символ строки в xml-файле макета и проверяем изменение tht на эмуляторе, а не на экране макета.