Текст 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 используем символ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\