Kann ich die Anzahl der Zeichen in TextView begrenzen?


71

Was ich jetzt habe, ist eine ListView von TextView-Elementen. Jedes TextView-Element zeigt einen Text an (die Textlänge variiert zwischen 12 Wörtern und 100+). Ich möchte, dass diese Textansichten einen Teil des Textes anzeigen (sagen wir 20 Wörter oder ungefähr 170 Zeichen).

Wie beschränke ich die Textansicht auf eine feste Anzahl von Zeichen?

Antworten:


165

Hier ist ein Beispiel. Ich beschränke die Größe mit dem Attribut maxLength, beschränke sie auf eine einzelne Zeile mit dem Attribut maxLines und füge dann mit ellipsize = end automatisch ein "..." am Ende einer abgeschnittenen Zeile hinzu.

<TextView 
    android:id="@+id/secondLineTextView" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:maxLines="1" 
    android:maxLength="10" 
    android:ellipsize="end"/>

2
"Verwenden Sie dann das ellipsize = Festzelt, um automatisch ein" ... "am Ende einer Zeile einzufügen"
Booger

Hört sich gut an. Ich werde es versuchen.
iTurki

5
@Booger android: ellipsize = "Festzelt" füge keine Auslassungspunkte (...) am Ende hinzu, sondern deckt das Ende des abgeschnittenen Textes als Zeichen der Begrenzung ab. android: ellipsize = "end" fügt die Ellipse (...) am Ende hinzu, während android: ellipsize = "start" die Ellipse am Anfang
anfügt

@ajdeguzman was soll ich tun, wenn ich den restlichen Text in der zweiten Zeile haben möchte. Ich habe die maxLines = 2 gemacht und den Ellipsengrößenparameter nicht eingeschlossen. Ich weiß, dass es auch etwas gibt, das als em bekannt ist, aber ich habe keine klare Erklärung bekommen, wie es funktioniert.
Sagar Devanga

Ich denke, layout_width hat eine Beziehung zum Auslösen der Ellipsize-Eigenschaft. Gut erklärtes Beispiel, Bitte folgen Sie dem Link
Taranjeetsapra

9

Wenn Sie nicht an XML-Lösungen interessiert sind, können Sie dies möglicherweise tun:

String s="Hello world";
Textview someTextView;
someTextView.setText(getSafeSubstring(s, 5));
//the text of someTextView will be Hello

...

public String getSafeSubstring(String s, int maxLength){
  if(!TextUtils.isEmpty(s)){
    if(s.length() >= maxLength){
      return s.substring(0, maxLength);
    }
  }
  return s;
}

8

Verwenden Sie den folgenden Code in TextView

 android:maxLength="65"

Genießen...


3

Ich habe das mit dem maxEmsAttribut gemacht.

 <TextView
    android:ellipsize="end"
    android:maxEms="10"/>


1

Programmatischer Kotlin.

Schneiden Sie den Anfang des Textes ab:

 val maxChars = 10000
 if (helloWorldTextView.text.length > maxChars) {
      helloWorldTextView.text = helloWorldTextView.text.takeLast(maxChars)
 }

Schneiden Sie das Ende des Textes ab:

 val maxChars = 10000
 if (helloWorldTextView.text.length > maxChars) {
      helloWorldTextView.text = helloWorldTextView.text.take(maxChars)
 }

1

Ich teile ein Beispiel, in dem ich maxLength = 1 festgelegt habe, dh es auf eine einzelne Zeile mit dem Attribut maxLines beschränke. Verwenden Sie dann ellipsize = end, um dem Ende einer abgeschnittenen Zeile automatisch ein "..." hinzuzufügen .

Bitte beachten Sie: layout_width, das 120 dp beträgt, dh nach 120 dp löst jeder Text, der überschreitet, die Eigenschaft "ellipsize = end" aus

Fügen Sie den folgenden Code direkt ein, um dies zu überprüfen.

<TextView
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:maxLines="1"
    android:maxLength="40"
    android:text="Can I limit TextView's number of characters?"
    android:textColor="@color/black"
    android:textSize="12sp"
    android:textStyle="bold" />

.



-4

Sie können die TextView-Klasse erweitern und die Funktion setText () überschreiben. In dieser Funktion prüfen Sie die Textlänge oder die Wortbreite.


Besser als das Zählen der Textlänge oder der Wortmenge wäre es besser, das Attribut "maxLines" zusammen mit dem Attribut "ellipsize" zu verwenden, um den gewünschten Effekt zu erzielen.
Kapilgm
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.