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?

iTurki
quelle

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"/>
Popel
quelle
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;
}
Darko Petkovski
quelle
8

Verwenden Sie den folgenden Code in TextView

 android:maxLength="65"

Genießen...

Ganesh Katikar
quelle
3

Ich habe das mit dem maxEmsAttribut gemacht.

 <TextView
    android:ellipsize="end"
    android:maxEms="10"/>
Pratham Kesarkar
quelle
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)
 }
Blundell
quelle
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" />

.

taranjeetsapra
quelle
-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.

Andreas
quelle
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