So beenden Sie TextView mit 3 Punkten mit maxLength

Lesezeit: 4 Minuten

Benutzer-Avatar
Janiv

Ich habe ein TextView in meinem Layout, das ist wrap_content in layout_width. Es ist auf maximal 15 Zeichen begrenzt, also verwende ich maxLength.

Ich muss das beenden TextView mit 3 punkten (…) und es passiert nur wenn ich die gebe layout_width eine feste Größe in dp, etwas, das ich nicht tun möchte.

Ich weiß, dass es programmgesteuert möglich ist, indem die Zeichenfolge nach dem 15. Zeichen gekürzt und dann die 3 Punkte hinzugefügt werden, aber ich bevorzuge dies per XML.

Irgendeine Idee, wie man den Text mit 3 Punkten beendet und Wrap_content belässt?

<TextView
    android:id="@+id/inbox_contactName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:lines="1"
    android:maxLines="1"
    android:ellipsize="end"
    android:singleLine="true"
    android:maxLength="15"
    android:textColor="#0670b4"
    android:textSize="16sp" />

  • Sie können es am Ende im Code tun\

    – Scherif el-Khatib

    2. Oktober 2012 um 8:01 Uhr

  • Ich weiß, aber ich bevorzuge es per XML.

    – Janiv

    2. Oktober 2012 um 8:02 Uhr

  • siehe: stackoverflow.com/questions/1666736/…

    – HelmiB

    2. Oktober 2012 um 8:04 Uhr


  • @Yaniv: Du musst es versuchen android:ellipsize="marquee" Anstatt von android:ellipsize="end" ?

    – ρяσѕρєя K

    2. Oktober 2012 um 8:05 Uhr


  • @HelmiB: Es ist nicht das gleiche Problem, da es dort mit maxLength keine Verwendung gibt. Wie auch immer, ich habe es versucht und es hat es nicht gelöst. Vielen Dank

    – Janiv

    2. Oktober 2012 um 8:12 Uhr

Benutzer-Avatar
Kirche

Das wird dein Problem lösen, Use ellipsize Eigenschaft in Ihrem XML-Code

android:ellipsize="end" <!-- This makes the magic ... thing -->
android:maxEms="15" <!-- Limit of the Text -->
android:singleLine="true" <!-- In case if you want everything in one line -->

Bearbeiten: singleLine ist veraltet. Verwenden maxlines="1" stattdessen.

  • Das ist mir heute aufgefallen singleLine="true" und maxlines="1" verhalten sich anders, wenn sie mit verwendet werden maxWidth und ellipsize – aus irgendeinem Grund schneidet es mehr mit ab maxlines – weiß aber nicht warum.

    – NemoOudeis

    30. November 2016 um 6:14 Uhr


  • @Kirk maxEms funktioniert nicht, um die Anzahl der Ziffern einzuschränken, während bei Verwendung von maxLength keine Punkte angezeigt werden.

    – Narendra Singh

    4. Februar 2017 um 11:14 Uhr

  • @king möglicherweise veraltet. Zum Zeitpunkt der Beantwortung dieser Frage war es eine funktionierende Lösung. Wenn jemand den neuesten Patch dazu kennt, aktualisieren Sie bitte meine Antwort.

    – Kirk

    4. Februar 2017 um 11:23 Uhr


  • Ems != Anzahl Zeichen

    – AlexAndro

    2. Mai 2018 um 13:50 Uhr

  • Dies löst das Problem nicht, da maxEms begrenzen Sie die Breite auf einen festen Wert. Es funktioniert nur, wenn Sie eine App für eine bestimmte Auflösung entwickeln, was normalerweise nie der Fall ist.

    – Feuern

    1. Mai 2019 um 15:41 Uhr

Sie können nicht beide verwenden maxLength und Ellipsize obwohl Sie definieren können Maximum EMS siehe das Beispiel unten

<TextView
        android:id="@+id/tv_hist_source_lang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxEms="8"
        android:maxLines="1"
        android:text="TextView"
        android:textAppearance="?android:attr/textAppearanceMedium" />

Es sieht aus wie das

  • Dies funktioniert, obwohl maxLines=”1″ angegeben ist, da maxEms die Länge der in TextView eingefügten Zeichenfolge begrenzt. Diese Art der Begrenzung wird auch von maxLength angegeben, wenn sie über die Breite der TextView hinausgeht, wenn sie beispielsweise 150 dp angegeben ist (dann werden die Auslassungspunkte angezeigt).

    – Abhinav Saxena

    5. Dezember 2021 um 15:33 Uhr


Benutzer-Avatar
Ravi

Ich entnehme (aus dem Kommentar), dass @Yaniv es bereits mit Code gelöst hat – aber dies ist der richtige Weg, es zu tun (mit XML). Kann anderen Usern helfen, die hier landen. Der Trick besteht darin, beide toleftof zu verwenden und rechtsvon.

<RelativeLayout>
...
 <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:singleLine="true"
        android:layout_toRightOf="@id/some_element1"
        android:layout_toLeftOf="@id/some_element2"/>
...
<RelativeLayout>

  • Ich musste nur verwenden toLeftOf.

    – das Blang

    22. Januar 2014 um 18:56 Uhr

  • Es funktioniert nicht, bis layout_width gleich match_parent ist. Es funktioniert auch nicht, wenn (zum Beispiel) drei oder mehr Textansichten hintereinander sind und layout_width auf wrap_content gesetzt ist. Daher sollten Sie die Größe der Breite der Textansicht durch Gewicht, max_length, Zeilen oder ems begrenzen.

    – Abhinav Saxena

    5. Dezember 2021 um 15:37 Uhr


Sie können verwenden

android:maxWidth="100dp"
android:maxLines="1"
android:ellipsize="end"

Nur das funktioniert bei mir.

benutze das android:ellipsize="end"

Benutzer-Avatar
Enzokie

Einer der einfachsten Wege ist das Hinzufügen Rechte Polsterung + Ellipse

<TextView
            android:id="@+id/txtvw_contentcell_subhead"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Polem sampler, Lorem Ipsum golep tolem burop yemit noski"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="@color/caption_black_color"
            android:textSize="@dimen/caption_size"
            android:paddingRight="40dp"/>

Hier ist ein Beispiel für einen Untertiteltext mit Zeichenbegrenzung.
Geben Sie hier die Bildbeschreibung ein

Benutzer-Avatar
Johannes T

Versuchte die meisten der oben genannten Lösungen. Die Verwendung von maxWidth war für mich der Schlüssel:

android:maxWidth="100dp"
android:maxLines="1"
android:ellipsize="end"

1215900cookie-checkSo beenden Sie TextView mit 3 Punkten mit maxLength

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy