wake-up-neo.net

Android TextView Text wird nicht verpackt

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>
73
d-man

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> 

75
d-man

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));
40
hcpl

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

19
Kartaguez

Es reicht aus, sie in Ihrer XML-Datei zu verwenden.

Android:singleLine="false".

Ich hoffe es wird klappen.

Alles Gute!

12
Dhasneem

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:

TableLayout

http://code.google.com/p/Android/issues/detail?id=4000

Hoffe das hilft jemandem.

10
wired00

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.

4
user244561

Legen Sie die Höhe der Textansicht Android:minHeight="some pixes" oder Android:width="some pixels" fest. Es wird das Problem lösen.

3
Chandra

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.

3
iBabur

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.

2
Ben Horner

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.

1
Supahfly

Erhöhen Sie die Höhe, d.

1
Phani varma

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. 

1
nsuinteger

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"
        />
0
smasper

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.
0
Linh Lino

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.

0
Siddharth

Ich weiß, dass es in Frage richtig ist, aber in meinem Fall bestand das Problem darin, die textSize-Eigenschaft in 'dp' festzulegen.

0
Krystian

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"/>
0
Beto Caldas

sie müssen Android:singleLine="false" in ur TextView-Tags verwenden.

0
Praveen

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

0
cagney

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.

0
likejudo

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.

0
crubio

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.

0
Janaka Bandara

Ich fügte ein\n in die Mitte meiner Saite ein und es sah okay aus.

0
Yusuf X