20 Stimmen

Textansicht zeigt Teiltext

Ich habe eine TextView, in die ich eine Nachricht laden muss. Die TextView hat maximal 2 Zeilen ( android:lines="2" ). Die Nachricht kann einen ' \n ' Zeichen.

Wie sollte ich die Nachricht in dieser TextView laden, so dass Wörter umbrochen werden und wenn in diesen 2 Zeilen Nachricht nicht passt, am Ende des letzten sichtbaren Wortes muss ich drei Punkte (...) hinzufügen? Wie kann ich die Länge des Textes erkennen, der in die TextView passt?

Mein Code für TextView lautet

<TextView
            a:id="@+id/tv_message"
            a:gravity="top"
            a:layout_width="wrap_content"
            a:layout_height="wrap_content"
            a:layout_alignParentTop="true"
            a:layout_toRightOf="@id/iv_icon"
            a:layout_marginLeft="2dp"
            a:layout_marginTop="4dp"
            a:paddingRight="7dp"
            a:paddingBottom="5dp"
            a:textSize="12sp"
            a:typeface="sans"
            a:ellipsize="marquee"
            a:lines="2"
            a:maxLines="2"
            a:textColor="@android:color/black"
            />

In der Anwendung erscheint der Text jedoch in zwei Zeilen, auch wenn es eine Zeile mit der Unterschrift gibt. Die Meldung lautet wie folgt: "Nachrichtentext" + " \nSignature "aber die Nachricht kann 1, 2 oder 3 Zeilen lang sein, je nach Länge der Nachricht.

0 Stimmen

Warum müssen Sie die Länge des Textes kennen? Sie kann bei verschiedenen Bildschirmgrößen variieren, es sei denn, Sie definieren eine feste Breite für die TextView.

0 Stimmen

Mein Problem ist, dass ich nicht weiß, wie ich 3 Punkte am Ende des letzten sichtbaren Wortes hinzufügen kann. Android:ellipsize="end" und Android:ellipsize="marquee" helfen nicht.... also dachte ich, dass ich nicht den gesamten Text in die Textansicht einfüge, sondern nur den Text, der in die Textansicht passt

0 Stimmen

Können Sie den Code für die TextView posten, die Sie jetzt verwenden? vielleicht gibt es andere Eigenschaften, die verhindern, dass die Ellipsengröße ein zu funktioniert.

25voto

Adinia Punkte 3660

Verwenden Sie in XML die Eigenschaft android:ellipsize="marquee" für die TextView.

Ihr TextView kann wie folgt definiert werden:

<TextView 
android:id="@+id/text" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:maxLines="2" 
android:lines="2" 
android:ellipsize="marquee"/>

bearbeiten : Ich habe den folgenden Code ausprobiert, der von Ihrem Code abgeleitet ist:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rlt_news"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/cell_background"
    android:padding="5dip" >

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:paddingLeft="5dip"
        android:text="Name"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/rss_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_title"
        android:layout_marginLeft="2dip"
        android:adjustViewBounds="true"
        android:maxHeight="100dip"
        android:maxWidth="100dip"
        android:src="@drawable/rss_cell_icon"
        android:visibility="visible" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="2dp"
        android:layout_marginTop="4dp"
        android:layout_toRightOf="@id/rss_icon"
        android:ellipsize="marquee"
        android:gravity="top"
        android:lines="2"
        android:maxLines="2"
        android:paddingBottom="5dp"
        android:paddingRight="7dp"
        android:text="Description of the news, just the short paragraph, \nSignature, to see how it works if there are more than two lines"
        android:textColor="@android:color/black"
        android:textSize="12sp"
        android:typeface="sans" />

</RelativeLayout>

Und hier ist das Ergebnis:
enter image description here

0 Stimmen

Es hilft nicht... Wenn ich die Meldung habe: Zeile1 \nline2 \nline3 nach Zeile 2 muss ich 3 Punkte hinzufügen, weil die Nachricht nicht passt

0 Stimmen

Haben Sie versucht, dieses Attribut zu verwenden? Es nur den Text nach der zweiten Zeile abschneiden und setzen Sie die drei Punkte für Sie, ich Ausschneiden und Einfügen es von meinem Code.

0 Stimmen

Ich habe meinen Code durch Ihren ersetzt und es funktioniert, ich habe ein Bild mit den Ergebnissen gepostet... Ich weiß nicht, was dort passiert, vielleicht setzen Sie einige der Eigenschaften im Code auch? Oder ich verstehe einfach nicht, was Sie wollen... Haben Sie auch die neue Lösung von @slup ausprobiert?

12voto

Ashwin Punkte 1152

Verwenden Sie android:ellipsize="end" anstelle von "marquee", das war's für mich.

8voto

Gaspar de Elias Punkte 244

Gabi,

Ich hatte auch das gleiche Problem. Um die Ellipsengröße bei einer Textansicht mit 2 Zeilen zu aktivieren, verwende ich die folgenden Parameter:

android:maxLines="2"   // You already got this one
android:ellipsize="end" // also this one
android:singleLine="false"  // This is the command that solves your problem.

Leider habe ich ein neues Szenario für meine App. Ich muss 3 Zeilen mit ellipsize verwenden und diese Konfiguration funktioniert nur für 2 Zeilen... :( Viel Glück

0 Stimmen

@Gasper es hat bei mir funktioniert. Ich beantrage 1 Zeile. Ich danke Ihnen vielmals.

4voto

Ken Shiro Punkte 703

Wenn Sie den Text aus dem Code setzen, müssen Sie die Optionen noch einmal setzen!

textView.setText(content);
textView.setEllipsize(TruncateAt.END);
textView.setLines(5);
textView.setMaxLines(5);

1voto

Shalu T D Punkte 3555

Es funktioniert bei mir, wenn ich es im Code und nicht im XML-Layout einstelle

holder.txtDescription.setText(text);
holder.txtDescription.setMaxLines(3);
holder.txtDescription.setEllipsize(TruncateAt.END);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X