Ich würde gerne auch Höhe bekommen, wenn möglich.
android
string
bounding-box
Mikael Lindlöf
quelle
quelle
textView.setTextSize()
.Wenn Sie nur die Breite benötigen, können Sie verwenden:
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
quelle
TextPaint paint = new TextPaint(); paint.setTextSize(textSize);
.textSize
ist in Pixel.Es gibt zwei verschiedene Breitenmaße für einen Text. Eines ist die Anzahl der Pixel, die in der Breite gezeichnet wurden, das andere ist die Anzahl der 'Pixel', die der Cursor nach dem Zeichnen des Textes nach vorne bewegen sollte.
paint.measureText und paint.getTextWidths geben die Anzahl der Pixel (in float) zurück, die der Cursor nach dem Zeichnen der angegebenen Zeichenfolge vorrücken soll. Verwenden Sie für die Anzahl der gemalten Pixel paint.getTextBounds, wie in der anderen Antwort angegeben. Ich glaube, dies wird als "Fortschritt" der Schrift bezeichnet.
Bei einigen Schriftarten unterscheiden sich diese beiden Maße (stark), z. B. hat die Schriftart Black Chancery Buchstaben, die sich über die anderen Buchstaben hinaus erstrecken (überlappend) - siehe Großbuchstabe 'L'. Verwenden Sie paint.getTextBounds wie in einer anderen Antwort erwähnt, um Pixel zu malen.
quelle
Ich habe die Breite folgendermaßen gemessen:
Das würde dir helfen.
quelle
Höchstwahrscheinlich möchten Sie die gemalten Abmessungen für eine bestimmte Textzeichenfolge mit einer bestimmten Schriftart kennen (dh eine bestimmte Schriftart
Typeface
wie die serifenlose Schriftfamilie mit einem BOLD_ITALIC-Stil und eine bestimmte Größe in sp oder px).Anstatt einen ausgewachsenen Text aufzublasen
TextView
, können Sie auf einer niedrigeren EbenePaint
direkt mit einem Objekt für einzeiligen Text arbeiten, zum Beispiel:Verwenden Sie für mehrzeiligen oder überspannten Text (
SpannedString
) die Verwendung von aStaticLayout
, in der Sie die Breite angeben und die Höhe ableiten. Eine sehr ausführliche Antwort zum Messen und Zeichnen von Text auf einer Leinwand in einer benutzerdefinierten Ansicht finden Sie unter: https://stackoverflow.com/a/41779935/954643Erwähnenswert ist auch die Antwort von @ arberg unten zu den gemalten Pixeln im Vergleich zur Vorschubbreite ("Anzahl der Pixel (in Gleitkomma), um die der Cursor nach dem Zeichnen der angegebenen Zeichenfolge vorgeschoben werden soll"), falls Sie sich damit befassen müssen.
quelle
Ich möchte einen besseren Weg (vielseitiger als die derzeit akzeptierte Antwort
String
) mit der Verwendung der statischen Klasse teilen , um die genaue Breite eines gezeichneten Textes ( ) zu erhaltenStaticLayout
:Diese Methode ist genauer als
textView.getTextBounds()
, da Sie die Breite einer einzelnen Zeile in einer mehrzeiligen Zeile berechnen könnenTextView
oder sie möglicherweise nicht verwendenTextView
(z. B. in einer benutzerdefiniertenView
Implementierung).Dieser Weg ist ähnlich
textPaint.measureText(text)
, scheint jedoch in seltenen Fällen genauer zu sein.quelle