Kann mir jemand sagen, was mit dem Text falsch läuft? Text, der länger als eine Zeile ist, wird nicht in die nächste Zeile umgebrochen, sondern geht über den Bildschirm hinaus.
Es folgt 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>
xmlns:android="http://schemas.android.com/apk/res/android"
das Element on root haben.Antworten:
Ich habe es selbst repariert, 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>
quelle
android:layout_weight=1
anstelle einer Breite von Null bedeutet, dass die Textansicht den verbleibenden InhaltDie einzig richtige Antwort auf diese Frage ist , dass Sie die Eltern auf eine geeignete Breite gesetzt (in diesem Fall
FILL_PARENT
,WRAP_CONTENT
) und verwenden Sieandroid:layout_weight=1
für die Textview , dass Bedürfnisse zu umwickeln.SingleLine
ist standardmäßig aktiviert, damit keine Änderungen vorgenommen werden.Ein
width
Satz auf 0px funktioniert, ist aber keine gute Lösung.Ein Beispiel (diesmal in einer Tabellenansicht) mit 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>
Wenn Sie dies im Code festlegen möchten, suchen Sie das layout_weight als dritten Parameter wie in diesem Beispiel, in dem 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));
quelle
Sie müssen 2 Parameter verwenden:
android:ellipsize="none"
: Der Text wird nicht auf die Breite der Textansicht zugeschnittenandroid:scrollHorizontally="false"
Der Text wird so viele Zeilen wie nötig umbrochenquelle
Es reicht aus, um in Ihrer XML-Datei zu verwenden.
android:singleLine="false".
Hoffe es wird funktionieren.
Alles Gute!
quelle
Ich konnte keine dieser Lösungen zum Laufen bringen, wenn ich a
TableLayout>TableRow>TextView
. Ich habe dann gefundenTableLayout.shrinkColumns="*"
. Die einzige andere Lösung, die funktionierte, war das Erzwingen der Textansichtlayout_width:250px
usw., aber ich mag es nicht, solche Breiten zu erzwingen.Versuchen Sie so etwas, wenn Sie mit Tabellen arbeiten.
<TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:shrinkColumns="*">
Beachten Sie, dass Sie benötigen
shrinkColumns="*"
Dies ist offensichtlich innerhalb eines
<LinearLayout>
. Also so etwas wie<LinearLayout> <TableLayout> <TableRow> <TextView>
Verweise:
TableLayout
http://code.google.com/p/android/issues/detail?id=4000
Hoffe das hilft jemandem.
quelle
Einer Ihrer Layoutparameter ist in Ihrem Code falsch. In der ersten Textansicht
android:layout_width="wrap_content"
ändern
android:layout_width="fill_parent"
Der Text außerhalb der Bildschirmbreite wird in die nächste Zeile umgebrochen und festgelegt
android:singleline="false"
.quelle
fill_parent
wurde veraltet und ersetzt durchmatch_parent
.Stellen Sie die Höhe der Textansicht
android:minHeight="some pixes"
oder einandroid:width="some pixels"
. Es wird das Problem lösen.quelle
Für meinen Fall hat das Entfernen des Eingabetyps den Trick gemacht. Ich habe android verwendet: inputType = "textPostalAddress", da meine Textansicht an einer Zeile klebte und nicht umbrochen wurde. Durch Entfernen dieses Eingabes wurde das Problem behoben.
quelle
Ich bin ein Android (und GUI) Anfänger, habe aber viel Erfahrung mit Software. Ich habe einige der Tutorials durchgearbeitet, und dies ist mein Verständnis:
layout_width und layout_height sind Attribute der TextView. Sie sind Anweisungen, wie sich die Textansicht selbst formen soll. Sie beziehen sich nicht auf den Umgang mit dem Inhalt in der Textansicht.
Wenn Sie "fill_parent" verwenden, sagen Sie, dass sich die Textansicht relativ zur übergeordneten Ansicht selbst formen und füllen sollte.
Wenn Sie "wrap_content" verwenden, sollten Sie die übergeordnete Ansicht ignorieren und den Inhalt der Textansicht die Form definieren lassen.
Ich denke, das ist der verwirrende Punkt. "wrap_content" teilt der Textansicht nicht mit, wie der Inhalt verwaltet werden soll (um die Zeilen zu umbrechen), sondern weist an, dass sie sich relativ zum Inhalt selbst formen soll. In diesem Fall formt es sich ohne neue Zeilenzeichen so, dass sich der gesamte Text in einer einzelnen Zeile befindet (was leider über das übergeordnete Element hinausgeht).
Ich denke, Sie möchten, dass es das übergeordnete Element horizontal ausfüllt und den Inhalt vertikal umschließt.
quelle
Obwohl dies ein alter Thread ist, möchte ich meine Erfahrungen teilen, da sie mir geholfen haben. Meine Anwendung funktionierte einwandfrei für OS 2.0 und 4.0+, aber für ein HTC-Telefon mit OS 3.x wurde der Text nicht umbrochen. Was für mich funktioniert hat, war, diese beiden Tags einzuschließen.
android:maxLines="100" android:scrollHorizontally="false"
Wenn Sie beides eliminieren, funktionierte es nicht nur für das OS 3.0-Gerät. Der Parameter "Ellipsize" hatte einen neutralen Effekt. Hier ist das Volltext-Tag unten
<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.
quelle
Erhöhen Sie die Höhe dh. android: height = "Irgendeine Größe", es funktioniert gut für mich.
quelle
Ich hatte ein ähnliches Problem, bei dem meine beiden horizontal gewichteten TextViews den Text nicht umschlossen. Ich fand später heraus, dass das Problem darin bestand, dass die Eltern meiner Ansichtselternteile wrap_content anstelle von match_parent hatten.
quelle
Ich denke, es hängt von der jeweiligen Kombination der Layouts in Ihrem Display ab. Einige Flags werden möglicherweise überschrieben oder ignoriert. Ich habe einen TabHost mit Registerkarten, jede Registerkarte ist eine Liste von Tabellen. Es ist also eine Registerkarte von ListView, wobei jede Zeile ein TableLayout von TextView ist. Ich habe die oben aufgeführten Korrekturen ausprobiert und keine davon hat funktioniert.
quelle
Ich weiß, dass es fraglich richtig ist, aber in meinem Fall bestand das Problem darin, die textSize-Eigenschaft in 'dp' festzulegen - ich habe sie in 'sp' geändert und sie funktioniert einwandfrei.
quelle
In meinem Fall habe
TableRow > ScrollView > TextView
ich das Problem mit einer Verschachtelung gelöst, indem ichandroid:layout_width
auffill_parent
onTableRow
undwrap_content
onScrollView
und gesetzt habeTextView
.quelle
Sie müssen
android:singleLine="false"
in urTextView
Tags verwenden.quelle
Ich habe es endlich geschafft, der Höhe der Textansicht einige Pixel hinzuzufügen, um dieses Problem zu lösen.
Zuerst müssen Sie tatsächlich die Höhe der Textansicht 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 dimension.xml hinzufügen
<dimen name="view_add_height">10dp</dimen>
Ich hoffe es hilft.
quelle
Ich habe es gerade entfernt
android:lines="1"
und hinzugefügtandroid:maxLines="2"
. Dadurch wurde der Text automatisch umbrochen. Das Problem war dasandroid:lines
Attribut. Dies führt dazu, dass der Textumbruch nicht ausgeführt wird .Ich musste nicht
maxEms
odersingleLine="false"
(veraltete API) verwenden, um dies zu beheben.quelle
Ich habe Stunden damit verbracht herauszufinden, dass der Text, den ich anzeigen wollte, ein einfaches Anführungszeichen (in string.xml) enthielt, also habe ich ihn nur mit einem Backslash maskiert und es hat gut funktioniert => Die Höhe der Textansicht hat den Text 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" />
quelle
Ich verwende hauptsächlich das Einschränkungslayout.
1)
android:layout_width="match_parent"
= versucht sich zu dehnen, um Kanten zu treffen2)
android:layout_width="wrap_content"
= basiert ausschließlich auf dem Eingabetext ohne Berücksichtigung anderer Ansichten in der Nähe. Durch Hinzufügenandroid:textAlignment="center"
wird beispielsweise die Form des Texts geändert3)
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 aufzunehmen
quelle
Ich habe dieses Attribut gesetzt:
android:inputType="textMultiLine"
in meine TextView und es hat Zeilenumbruch und Benutzer kann für eine neue Zeile "Enter".
================================================== ==========
Wenn Sie zu diesem Beitrag kommen, möchten Sie möglicherweise eine große Textansicht erstellen, die mehrere Zeilen anzeigen kann, sodass diese Attribute möglicherweise auch benötigt werden
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.
quelle
Ich habe
android:ems="23"
mein Problem gelöst. 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"/>
quelle
Ich habe ein \ n in die Mitte meiner Zeichenfolge eingefügt und es sah in Ordnung aus.
quelle
Um den Text zu umbrechen und den Text in die nächste Zeile einzufügen, verwenden wir das Zeichen "\ n", dh das neue Zeilenzeichen in der Layout-XML-Datei, und überprüfen Sie die Änderung auf dem Emulator und nicht auf dem Layoutbildschirm.
quelle