Gibt es eine Methode, die die Breite (in Pixel) eines Textes zurückgibt, der auf einer Android-Leinwand gezeichnet werden soll, indem die Methode drawText() entsprechend dem zum Zeichnen verwendeten Paint verwendet wird?
Messen der Textbreite, die auf Leinwand gezeichnet werden soll (Android)
NioX5199
Markus Bernstein
Hast Du Dir angesehen android.graphics.Paint#messText(String txt)?
-
Danke das ist es! Ich weiß nicht, warum ich es übersprungen habe. Der Zweck bestand darin, einfach einen Text in der Mitte des Bildschirms zu zeichnen. Wie auch immer, mir wurde gerade klar, dass ich auch einfach setTextAlign(Align.CENTER) für die zum Zeichnen des Textes verwendete Farbe hätte verwenden können, es verschiebt den angegebenen Ursprung in die Mitte des gezeichneten Textes. Vielen Dank.
– NioX5199
15. Juli 2010 um 16:17 Uhr
-
Großartig, danke, Ausrichtung auf Farbe einstellen! wer hätte das gedacht…?
– Sanjay Manohar
5. August 2011 um 2:22 Uhr
-
oder Sie können die Schwerkraft der Textansicht auf Mitte setzen
– Yeradis
21. Oktober 2011 um 14:38 Uhr
Hamid Reza Zavareh
Paint paint = new Paint();
Rect bounds = new Rect();
int text_height = 0;
int text_width = 0;
paint.setTypeface(Typeface.DEFAULT);// your preference here
paint.setTextSize(25);// have this the same as your text size
String text = "Some random text";
paint.getTextBounds(text, 0, text.length(), bounds);
text_height = bounds.height();
text_width = bounds.width();
Suragch
Ergänzende Antwort
Es gibt einen kleinen Unterschied zwischen der von zurückgegebenen Breite Paint.measureText
und Paint.getTextBounds
. measureText
gibt eine Breite zurück, die den advanceX-Wert der Glyphe enthält und den Anfang und das Ende der Zeichenfolge auffüllt. Das Rect
Breite zurückgegeben von getTextBounds
hat diese Polsterung nicht, weil das die Grenzen ist Rect
die den Text fest umschließt.
Quelle
Es gibt eigentlich drei verschiedene Möglichkeiten, Text zu messen.
GetTextBounds:
val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val rect = Rect()
paint.getTextBounds(contents, 0, 1, rect)
val width = rect.width()
Textbreite messen:
val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val width = paint.measureText(contents, 0, 1)
Und getTextWidths:
val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val rect = Rect()
val arry = FloatArray(contents.length)
paint.getTextBounds(contents, 0, contents.length, rect)
paint.getTextWidths(contents, 0, contents.length, arry)
val width = ary.sum()
Beachten Sie, dass getTextWidths nützlich sein kann, wenn Sie versuchen zu bestimmen, wann Text in die nächste Zeile umgebrochen werden soll.
measureTextWidth und getTextWidth sind gleich und haben die erweiterte Breite, über die andere gepostet haben. Manche halten diesen Platz für übertrieben. Dies ist jedoch sehr subjektiv und abhängig von der Schriftart.
Beispielsweise kann die Breite der Maßtextgrenzen tatsächlich zu klein aussehen:
Wenn Sie jedoch einen zusätzlichen Text hinzufügen, sehen die Grenzen für einen Buchstaben normal aus:
Bilder entnommen aus Android-Entwicklerhandbuch zum benutzerdefinierten Canvas-Zeichnen
Nun, ich habe es anders gemacht:
String finalVal ="Hiren Patel";
Paint paint = new Paint();
paint.setTextSize(40);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);
Rect result = new Rect();
paint.getTextBounds(finalVal, 0, finalVal.length(), result);
Log.i("Text dimensions", "Width: "+result.width()+"-Height: "+result.height());
Ich hoffe, das wird Ihnen helfen.
Armin J.
Ich habe die Methoden measureText() und getTextPath()+computeBounds() verwendet und ein Excel mit allen Textattributen für Schriftarten mit fester Größe erstellt, die unter zu finden sind https://github.com/ArminJo/android-blue-display/blob/master/TextWidth.xlsx . Dort finden Sie auch einfache Formeln für andere Textattribute wie aufsteigend etc.
Das App sowie die Funktion drawFontTest() zur Generierung der in Excel verwendeten Rohwerte sind ebenfalls in diesem Repo verfügbar.
Asch John
Sie können “textPaint.getTextSize()” verwenden, um die Textbreite zu erhalten