Holen Sie sich die Größe eines Textes in TextView

Lesezeit: 3 Minuten

Benutzeravatar von Imotep
Imotep

Ich habe ein Problem beim Platzieren einer TextView an den x- und y-Koordinaten des angegebenen Zentrums. Zuerst habe ich versucht, den Text in der TextView zu setzen und die Ansicht mit der Breite und der Höhe der Ansicht von diesem Link zu verschieben.

Aber es funktioniert nicht und ich würde gerne etwas anderes ausprobieren. Ich würde gerne wissen, ob es eine Methode gibt, um die Größe zu ermitteln, die ein bestimmter Text in meiner TextView einnehmen wird. Ich meine, ich kenne den Text und die Textgröße, wie kann ich die Breite und Höhe meiner TextView erhalten?

So etwas wie die Methode (NSString)sizeWithFont; für diejenigen, die iPhone-Entwickler kennen.

Benutzeravatar des Midverse-Ingenieurs
Midverse-Ingenieur

Rect bounds = new Rect();

textView.getPaint().getTextBounds(textView.getText().toString(), 0, textView.getText().length(), bounds);

bounds.width() gibt Ihnen die genaue Breite des Textes in der Textansicht.

  • Wie wir hier gerne sagen: Dies sollte die Antwort auf das OP sein. Die andere Antwort ist die übliche alte Methode zum Messen einer Ansicht, nicht einer Zeichenfolge in einer Ansicht.

    – Léon Pelletier

    8. August 2014 um 19:01 Uhr


  • pathView.getPaint().getTextBounds(pathView.getText().toString(), 0, pathView.getText().length(), bounds);

    – XurajB

    17. Dezember 2014 um 1:38 Uhr

  • Funktioniert dies auch bei der Höhe von mehrzeiligem TextView?

    – Hendra Anggrian

    21. Dezember 2016 um 11:27 Uhr

  • ist das Ergebnis Polsterung enthalten?

    – ucMedia

    16. Oktober 2019 um 14:50 Uhr

  • Nun, es ist nicht genau, ich bekomme zwei Zeilen statt einer, wenn ich Text einfüge

    – Benutzer924

    10. März 2020 um 14:23 Uhr

Benutzeravatar von Sherif elKhatib
Scherif el-Khatib

Wenn Ihre Textansicht tv heißt

tv.setText("bla");
tv.measure(0, 0);       //must call measure!
tv.getMeasuredHeight(); //get height
tv.getMeasuredWidth();  //get width

Mehr dazu (aktualisiert): So erhalten Sie Breite/Höhe einer Ansicht

  • Manchmal liefert dies kein genaues Maß, insbesondere wenn Sie eine Listenansicht verwenden

    – nunofmendes

    28. Februar 2013 um 11:22 Uhr

  • @nunofmendes du hast recht. Ich habe dieses Thema erweitert: check sherif.mobi/2013/01/how-to-get-widthheight-of-view.html

    – Scherif el-Khatib

    28. Februar 2013 um 12:34 Uhr

  • @MarceloFilho Ich weiß nicht, warum es sich an manchen Stellen öffnet und an anderen bricht. Sie können dies versuchen sherifandroid.blogspot.com/2013/01/…

    – Scherif el-Khatib

    10. Mai 2014 um 9:09 Uhr


  • Wenn der Text Zeilen enthält, die umgebrochen werden, müssen Sie die Breite der MeasureSpec auf AT_MOST setzen, um eine genaue Höhe zu erhalten. Beispielcode ist hier: stackoverflow.com/a/20087258/462162

    – Arlomedia

    11. November 2014 um 21:04 Uhr

  • Ihr aktualisierter Link (sherif.mobi/2013/01/how-to-get-widthheight-of-view.html), ist Arbeit wie ein Zauber. Danke Alter 🙂

    – Shailesh

    9. November 2016 um 14:05 Uhr

Aus irgendeinem Grund liefert mir die Lösung von Midverse Engineer nicht immer korrekte Ergebnisse (zumindest bei einigen Android-Versionen). Die Lösung von Sherif elKhatib funktioniert, hat aber den Nebeneffekt, dass MeasuredWidth und Height geändert werden. Dies könnte zu einer falschen Positionierung des TextViews führen.

Meine Lösung:

width = textView.getPaint().measureText(text);
metrics = textView.getPaint().getFontMetrics();
height = metrics.bottom - metrics.top;

Verwenden der inneren TextView Paing Klasse ist nicht so heiß, wenn Sie mehrere Textzeilen und unterschiedliche Auffüllungen haben. Hören Sie also auf, das Rad neu erfinden zu wollen. Verwenden getMeasuredHeight und getMeasuredWidth Methoden nach dem Aufruf measure(UNSPECIFIED, UNSPECIFIED). Vergessen Sie nur nicht, die neuen Werte in den Beitrag zu übernehmen, da Sie sonst meistens ein falsches Ergebnis erhalten.

tv.setText(state.s);
tv.measure(UNSPECIFIED,UNSPECIFIED);
tv.post(new Runnable() {
    @Override
    public void run() {
       Log.d("tv","Height = "+tv.getMeasuredHeight());
       Log.d("tv","Width  = "+tv.getMeasuredWidth());
    }
});

1438770cookie-checkHolen Sie sich die Größe eines Textes in TextView

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

Privacy policy