it-swarm.com.de

Android, Wie beschränke ich die Breite von TextView (und füge drei Punkte am Ende des Textes hinzu)?

Ich habe einen TextView, den ich die Zeichen begrenzen möchte. Eigentlich kann ich das machen, aber ich suche nach drei Punkten (...) am Ende der Zeichenkette. Dieses zeigt, dass der Text weitergeht. Dies ist mein XML, aber es gibt keine Punkte, obwohl es meinen Text einschränkt.

<TextView 
        Android:id                      = "@+id/tvFixture"
        Android:layout_width            = "wrap_content"
        Android:layout_height           = "wrap_content"
        Android:layout_toLeftOf         = "@id/ivFixture_Guest"
        Android:text                    = "@string/test_06"
        Android:lines                   = "1"
        Android:ems                     = "3"
        Android:gravity                 = "right"
        style                           = "@style/simpletopic.black" 
        Android:ellipsize="end"/>
247
Hesam

Veraltet:

Fügen Sie in Ihrer Textansicht eine weitere Eigenschaft Android:singleLine="true" hinzu 

Aktualisierte:

Android:ellipsize="end" 
Android:maxLines="1"
544
Azhar Shaikh

Das Folgende ist, was ich gelernt habe, indem ich mit verschiedenen Optionen herumgespielt habe, um eine TextView in eine einzelne Zeile (mit und ohne die drei Punkte) zu zwingen.

enter image description here

Android: maxLines = "1"

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:maxLines="1"
    Android:text="one two three four five six seven eight nine ten" />

Dies zwingt den Text nur zu einer Zeile. Zusätzlicher Text wird ausgeblendet. 

Verbunden:

ellipsize = "Ende"

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:maxLines="1"
    Android:ellipsize="end"
    Android:text="one two three four five six seven eight nine ten" />

Dadurch wird der nicht passende Text abgeschnitten, der Benutzer wird jedoch durch das Hinzufügen einer Ellipse (der drei Punkte) darauf hingewiesen, dass der Text abgeschnitten wurde. 

Verbunden:

ellipsize = "Marquee"

<TextView
    Android:id="@+id/MarqueeText"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:maxLines="1"
    Android:singleLine="true"
    Android:ellipsize="Marquee"
    Android:focusable="true"
    Android:focusableInTouchMode="true"
    Android:text="one two three four five six seven eight nine ten" />

Dadurch wird der Text automatisch über die Textansicht gescrollt. Beachten Sie, dass manchmal im Code gesetzt werden muss:

textView.setSelected(true);

Angeblich sollten Android:maxLines="1" und Android:singleLine="true" im Grunde dasselbe tun, und da singleLine anscheinend veraltet ist , würde ich es vorziehen, es nicht zu verwenden, aber wenn ich es herausnehme, scrollt das Marquee nicht mehr. Das Herausnehmen von maxLines wirkt sich jedoch nicht darauf aus.

Verbunden:

HorizontalScrollView mit scrollHorizontally

<HorizontalScrollView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:id="@+id/horizontalScrollView">

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:maxLines="1"
        Android:scrollHorizontally="true"
        Android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>

Dadurch kann der Benutzer manuell scrollen, um die gesamte Textzeile anzuzeigen.

138
Suragch

Versuchen Sie diese Eigenschaft von TextView in Ihrer Layoutdatei.

Android:ellipsize="end"
Android:maxLines="1"
78
Niranj Patel

Ich nehme an, Sie möchten die Breite auf eine Zeile beschränken und nicht auf Zeichen beschränken? Da singleLine veraltet ist, können Sie Folgendes gemeinsam verwenden:

Android:maxLines="1"
Android:scrollHorizontally="true"
Android:ellipsize="end"
30
Muz

z.B. Sie können verwenden 

Android:maxLength="13"

dies beschränkt die Texexlänge auf 13, aber das Problem ist, wenn Sie versuchen, 3 Punkte hinzuzufügen (...). Diese wird nicht angezeigt, da sie Teil der Textviewlänge ist. 

     String userName;
     if (data.length() >= 13) {
            userName = data.substring(0, 13)+ "...";

     } else {

            userName = data;

    }
        textView.setText(userName);

abgesehen davon müssen Sie verwenden

 Android:maxLines="1"
10
Nayanesh Gupte

Ich habe das gewünschte Ergebnis erhalten mit 

Android:maxLines="2"
Android:minLines="2"
Android:ellipsize="end"

Der Trick besteht darin, maxLines und minLines auf den gleichen Wert zu setzen ... und nicht nur Android: lines = "2". Außerdem vermeiden Sie veraltete Attribute.

5
user1974433

code:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);

xml:

Android:maxLines = "5"

z.B.

In Matthäus 13 fragten die Jünger Jesus, warum er in Gleichnissen zu den Menschenmengen sprach. Er antwortete: "Es ist euch gegeben worden, die Geheimnisse des Himmelreiches zu kennen, aber es ist ihnen nicht gegeben worden.

Ergebnis: ... In Matthäus 13 fragten die Jünger Jesus, warum er in Gleichnissen zu den Menschenmengen sprach. Er antwortete: "Es wurde dir gegeben zu wissen ...

4
richardj

Ich verwende Horizonal Recyclerview. 
1) Hier in Textansicht wird TextView bei Verwendung vertikal verzerrt 

Android:ellipsize="end"
Android:maxLines="1"

Überprüfen Sie die mutigen TextViews Wyman Group, Jaskolski ...  enter image description here

2) Aber wenn ich singleLine zusammen mit Ellipsize verwendet habe - 

Android:ellipsize="end"
Android:singleLine="true"

Überprüfen Sie die mutigen TextViews Wyman Group, Jaskolski ...  enter image description here

Die zweite Lösung hat bei mir richtig funktioniert (mit singleLine). Ich habe auch in der Betriebssystemversion getestet: 4.1 und höher (bis 8.0), es funktioniert einwandfrei ohne Abstürze.

4
Varad Mondkar

Sie können die Anzahl der Zeichen Ihrer Textansicht begrenzen und nach dem Text hinzufügen (...). Angenommen, Sie müssen nur 5 Buchstaben anzeigen, und anschließend müssen Sie (...) anzeigen. Führen Sie einfach folgende Schritte aus:

String YourString = "abcdefghijk";

if(YourString.length()>5){

YourString  =  YourString.substring(0,4)+"...";

your_text_view.setText(YourString);
}else{

 your_text_view.setText(YourString); //Dont do any change

}

ein kleiner hack ^ _ ^. Obwohl es keine gute Lösung ist. Aber eine Arbeit, die für mich gearbeitet hat: D

EDIT: Ich habe den Check auf weniger Zeichen gemäß Ihrer beschränkten Nr. Hinzugefügt. von Zeichen.

4
TheLittleNaruto

Um mit dem Attribut Android: ellipsize arbeiten zu können, müssen Sie die Layoutbreite des TextView so einschränken, dass das text außerhalb der TextView-Ansicht liegt .

Also, Android: layout_width Attribut spielt hier eine Schlüsselrolle, setzt es entsprechend.

Ein Beispiel kann sein:

<TextView        
    Android:layout_width="120dp"
    Android:layout_height="wrap_content"
    Android:ellipsize="end"
    Android:text="This is a very long text to be displayed"
    Android:textSize="12sp"
    Android:maxLines="1"            
     />

Wenn hier text in Android: text = "Dies ist ein sehr langer Text, der angezeigt werden soll" geht aus TextView mit einem Android aus: layout_width = "120dp" , Android: ellipsize = "end" schneidet den text ab und platziert ... (3 Punkte) danach. d.h.Dies ist sehr lang ...wird in der Textansicht angezeigt.

3
Androwed

Sie müssen für die Textansicht folgende Zeilen in Ihr Layout einfügen

Android:maxLines="1"
Android:ellipsize="end"
Android:singleLine="true"

Hoffe, das funktioniert für dich.

3

Ich denke, Sie geben fixe Höhe und Breite der Textansicht an. Dann funktioniert Ihre Lösung.

2

sie können diese Zeile in XML schreiben, wobei Sie die Variable textview verwenden:

Android:singleLine="true"
2
Jay Thakkar

Der Ansatz von @AzharShaikh funktioniert gut.

Android:ellipsize="end"
Android:maxLines="1"

Ich erkenne jedoch ein Problem, dass TextView von Word abgeschnitten wird (standardmäßig). Zeigen Sie, ob wir einen Text haben wie:

test long_line_without_any_space_abcdefgh

die TextView zeigt an:

Prüfung...

Ich habe eine Lösung gefunden, um dieses Problem zu lösen, Leerzeichen durch das Unicode-Leerzeichen mit Leerzeichen zu ersetzen. TextView bewirkt, dass Zeichen anstelle von Wörtern umbrochen werden:

yourString.replace(" ", "\u00A0");

Das Ergebnis:

test long_line_without_any_space_abc ...

        <TextView
            Android:id="@+id/product_description"
            Android:layout_width="165dp"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="2dp"
            Android:paddingLeft="12dp"
            Android:paddingRight="12dp"
            Android:text="Pack of 4 summer printed pajama"
            Android:textColor="#d2131c"
            Android:textSize="12sp"
            Android:maxLines="2"
            Android:ellipsize="end"/>
1

Fügen Sie diese beiden Zeilen in Ihren Text ein

Android:ellipsize="end"
Android:singleLine="true"
1
SANJAY GUPTA

sie können das durch xml tun:

<TextView 
    Android:id="@+id/textview"
    Android:maxLines="1" // or any number of lines you want
    Android:ellipsize="end"
    />
0
Khalid Taha

Benutzen 

  • Android:singleLine="true"
  • Android:maxLines="1"
  • app:layout_constrainedWidth="true"

So sieht meine volle TextView aus:

    <TextView
    Android:id="@+id/message_title"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="5dp"
    Android:maxLines="1"
    Android:singleLine="true"
    Android:text="NAME PLACEHOLDER MORE Text"
    Android:textColor="@Android:color/black"
    Android:textSize="16sp"

    Android:textStyle="bold"
    app:layout_constrainedWidth="true"
    app:layout_constraintEnd_toStartOf="@id/message_check_sign"
    app:layout_constraintHorizontal_bias="0"
    app:layout_constraintStart_toEndOf="@id/img_chat_contact"
    app:layout_constraintTop_toTopOf="@id/img_chat_contact" />

Picture of <code>TextView</code>

0
kyrylo_23

Sie ändern sich einfach 

Android: layout_width = "wrap_content"

verwenden Sie diese unter der Zeile

Android: layout_width = "match_parent"

<LinearLayout
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerVertical="true"
            Android:layout_marginLeft="10dp"
            Android:layout_marginTop="10dp"
            Android:layout_toRightOf="@+id/visitBox"
            Android:orientation="vertical" >

            <TextView
                Android:id="@+id/txvrequestTitle"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:singleLine="true"
                Android:text="Abcdefghighiklmnon"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                Android:textColor="@color/orange_color" />


        </LinearLayout>
0
KeTaN