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 ответа:
я исправил это сам, ключ
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="*"
. Единственное другое решение, которое работало, заставляло TextViewlayout_width:250px
и т. д., Но мне не нравится заставлять ширины подобное.попробуйте что-то вроде этого при работе с таблицами.
<TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:shrinkColumns="*">
обратите внимание, что вам нужно
shrinkColumns="*"
это очевидно в
<LinearLayout>
. Что-то вроде<LinearLayout> <TableLayout> <TableRow> <TextView>
ссылки:
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"/>
надеюсь, что это поможет кому-то.
У меня была аналогичная проблема, когда мои два горизонтально взвешенных 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
tofill_parent
onTableRow
иwrap_content
onScrollView
и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), чтобы исправить это.
Я потратил часы, чтобы выяснить, что в тексте, который я пытался отобразить, содержалась одна кавычка (в строке.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"
= текст будет складываться для размещения соседних макетов без учета самого текста