Antworten:
Haben Sie sich android.graphics.Paint.measureText (String txt) angesehen ?
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();
Ergänzende Antwort
Es gibt einen kleinen Unterschied zwischen der von Paint.measureText
und zurückgegebenen Breite Paint.getTextBounds
. measureText
Gibt eine Breite zurück, die den Wert adv_X des Glyphen enthält, der den Anfang und das Ende der Zeichenfolge auffüllt. Die von zurückgegebene Rect
Breite getTextBounds
hat diese Auffüllung nicht, da die Grenzen Rect
den Text eng umschließen.
Es gibt tatsächlich 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()
MeasureTextWidth:
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 hilfreich sein kann, wenn Sie festlegen möchten, 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. Einige halten diesen Raum für übermäßig. Dies ist jedoch sehr subjektiv und abhängig von der Schriftart.
Beispielsweise kann die Breite von 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 aus dem Android Developers Guide für benutzerdefinierte Leinwandzeichnungen
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());
Hoffe das wird dir helfen.
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 https://github.com/ArminJo/android-blue-display/blob zu finden sind /master/TextWidth.xlsx . Dort finden Sie auch einfache Formeln für andere Textattribute wie Aufstieg usw.
Die App sowie die Funktion drawFontTest () zum Generieren der im Excel verwendeten Rohwerte sind ebenfalls in diesem Repo verfügbar.
Sie können "textPaint.getTextSize ()" verwenden, um die Textbreite abzurufen