Kann mir jemand sagen, was mit dem Text los ist? Text, der länger als eine Zeile ist, springt nicht zur nächsten Zeile, sondern geht über den Bildschirm hinaus.
Folgendes ist der Code:
<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>
Ich habe es selbst behoben, der Schlüssel ist 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>
Die einzig richtige Antwort auf diese Frage ist, dass Sie die übergeordneten Elemente auf die richtige Breite einstellen müssen (in diesem Fall FILL_PARENT
, WRAP_CONTENT
) und Android:layout_weight=1
für die Textansicht verwenden, die umbrochen werden soll.
SingleLine
ist standardmäßig aktiviert, sodass keine Änderungen vorgenommen werden.
Eine width
, die auf 0px gesetzt ist, funktioniert, ist aber keine gute Lösung.
Ein Beispiel (diesmal in einer Tableview), das xml verwendet:
<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>
Wenn Sie dies im Code festlegen möchten, suchen Sie nach dem layout_weight als dritten Parameter wie in diesem Beispiel, wo es auf 1 gesetzt ist:
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));
Sie müssen 2 Parameter verwenden:
Android:ellipsize="none"
: Der Text wird nicht auf die Breite der Textansicht geschnitten
Android:scrollHorizontally="false"
der Text wird in so vielen Zeilen wie nötig umbrochen
Es reicht aus, sie in Ihrer XML-Datei zu verwenden.
Android:singleLine="false".
Ich hoffe es wird klappen.
Alles Gute!
Ich konnte keine dieser Lösungen mit einem TableLayout>TableRow>TextView
zum Laufen bringen. Ich habe dann TableLayout.shrinkColumns="*"
gefunden. Die einzige andere Lösung, die funktionierte, bestand darin, TextView zu layout_width:250px
usw. zu zwingen.
Versuchen Sie etwas Ähnliches, wenn Sie mit Tabellen arbeiten.
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:shrinkColumns="*">
Beachten Sie, dass Sie shrinkColumns="*"
benötigen.
Dies ist offensichtlich innerhalb eines <LinearLayout>
. So etwas wie <LinearLayout> <TableLayout> <TableRow> <TextView>
verweise:
http://code.google.com/p/Android/issues/detail?id=4000
Hoffe das hilft jemandem.
Einer Ihrer Layoutparameter ist in Ihrem Code falsch. Im ersten TextView
Android:layout_width="wrap_content"
ändern
Android:layout_width="fill_parent"
Der Text, der außerhalb der Bildschirmbreite liegt, wird in die nächste Zeile umgebrochen und Android:singleline="false"
festgelegt.
Legen Sie die Höhe der Textansicht Android:minHeight="some pixes"
oder Android:width="some pixels"
fest. Es wird das Problem lösen.
Für meinen Fall das Entfernen des Eingabetyps war der Trick. Ich verwendete Android: inputType = "textPostalAddress", weil mein Textview an einer Zeile klebte und nicht umbrochen wurde. Das Problem wurde dadurch behoben.
Ich bin ein Anfänger für Android (und GUI), habe aber viel Erfahrung mit Software. Ich habe einige der Tutorials durchgegangen, und das ist mein Verständnis:
layout_width und layout_height sind Attribute der TextView. Sie sind Anweisungen, wie die TextView sich selbst gestalten soll. Sie beziehen sich nicht auf den Umgang mit dem Inhalt in der TextView.
Wenn Sie "fill_parent" verwenden, sagen Sie, dass die TextView sich relativ zu ihrer übergeordneten Ansicht gestalten sollte.
Wenn Sie "wrap_content" verwenden, sagen Sie, dass Sie die übergeordnete Ansicht ignorieren und die Form der Inhalte der TextView definieren lassen sollen.
Ich denke, das ist der verwirrende Punkt. "wrap_content" sagt dem TextView nicht, wie er den Inhalt verwalten soll (um die Zeilen zu umbrechen), es sagt ihm, dass es sich relativ zum Inhalt gestalten soll. In diesem Fall gestaltet sich der Text ohne neue Zeilenzeichen so, dass sich der gesamte Text in einer einzigen Zeile befindet (was leider den übergeordneten Text überläuft).
Ich denke, Sie möchten das übergeordnete Element horizontal ausfüllen und den Inhalt vertikal umschließen.
Ich hatte ein ähnliches Problem, wo meine zwei horizontal gewichteten TextViews den Text nicht umbrochen haben. Später fand ich heraus, dass das Problem darin lag, dass mein übergeordnetes Element der View-Eltern wrap_content anstelle von match_parent hatte.
Erhöhen Sie die Höhe, d.
Obwohl dies ein alter Faden ist, möchte ich meine Erfahrungen teilen, da es mir geholfen hat. Meine Anwendung funktionierte gut für OS 2.0 und 4.0+, aber für ein HTC-Telefon mit OS 3.x war der Text nicht umbrochen. Was für mich funktionierte, war, diese beiden Tags einzubeziehen.
Android:maxLines="100"
Android:scrollHorizontally="false"
Wenn Sie beide entfernen, funktionierte es nicht nur für das os 3.0-Gerät. Der Parameter "Ellipsize" hatte eine neutrale Wirkung. Hier ist das vollständige Textansicht-Tag
<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"/>
Hoffe das würde jemandem helfen.
Ich habe Stunden damit verbracht, herauszufinden, dass der Text, den ich anzeigen wollte, ein einzelnes Anführungszeichen enthielt (in string.xml), also bin ich mit einem Backslash entkommen und es funktionierte gut => die height der TextView Text wurde korrekt umbrochen:
<?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"
/>
Ich habe dieses Attribut gesetzt:
Android:inputType="textMultiLine"
in meine TextView und es hat eine Umbruchzeile und der Benutzer kann für eine neue Zeile "Enter".
================================================== ==========
Wenn Sie zu diesem Beitrag kommen, möchten Sie möglicherweise ein großes TextView erstellen, das mehrere Zeilen anzeigen kann, sodass diese Attribute möglicherweise ebenfalls erforderlich sind
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.
Ich habe gerade Android:lines="1"
entfernt und Android:maxLines="2"
hinzugefügt, dies hat den Text automatisch umbrochen. Das Problem war das Android:lines
-Attribut. Das bewirkt, dass der Text in nicht umgebrochen wird.
Ich musste nicht maxEms
oder singleLine="false"
(veraltete API) verwenden, um dies zu beheben.
Ich weiß, dass es in Frage richtig ist, aber in meinem Fall bestand das Problem darin, die textSize-Eigenschaft in 'dp' festzulegen.
Ich habe Android:ems="23"
verwendet, um mein Problem zu lösen. Ersetzen Sie einfach 23 durch den besten Wert in Ihrem Fall.
<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"/>
sie müssen Android:singleLine="false"
in ur TextView
-Tags verwenden.
Meist verwende ich das Constraint-Layout.
1) Android:layout_width="match_parent"
= versucht sich zu strecken, um Kanten zu treffen
2) Android:layout_width="wrap_content"
= basiert ausschließlich auf dem Eingabetext, ohne Rücksicht auf andere Ansichten in der Nähe. Durch Hinzufügen von Android:textAlignment="center"
wird beispielsweise die Form des Textes geändert
3) Android:padding="12dp"
Android:layout_width="0dp"
Android:layout_weight="1"
Android:singleLine="false"
= Der Text wird gefaltet, um nahegelegene Layouts ohne Rücksicht auf den Text selbst zu berücksichtigen
Ich denke, es hängt von der jeweiligen Kombination von Layouts in Ihrem Display ab. Einige Flags können überschrieben oder ignoriert werden. Ich habe einen TabHost mit Registerkarten. Jede Registerkarte enthält eine Liste von Tabellen. Es handelt sich also um eine Registerkarte von ListView, wobei jede Zeile ein TableLayout von TextView ist. Ich habe die oben genannten Korrekturen ausprobiert und keiner hat funktioniert.
Es ist mir schließlich gelungen, einige Pixel zur Höhe des TextView hinzuzufügen, um dieses Problem zu lösen.
Zuerst müssen Sie tatsächlich die Höhe der TextView ermitteln. Es ist nicht einfach, weil es 0 ist, bevor es bereits gemalt ist.
Fügen Sie diesen Code zu onCreate hinzu:
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);
}
}
});
}
Sie müssen diese Zeile zu dimens.xml hinzufügen.
<dimen name="view_add_height">10dp</dimen>
Ich hoffe es hilft.
In meinem Fall mit einer TableRow > ScrollView > TextView
-Verschachtelung löste ich das Problem, indem ich Android:layout_width
auf fill_parent
auf TableRow
und auf wrap_content
auf ScrollView
und TextView
setzte.
Ich fügte ein\n in die Mitte meiner Saite ein und es sah okay aus.