Risposte:
Hai visto android.graphics.Paint.measureText (String txt) ?
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();
Risposta supplementare
C'è una leggera differenza tra la larghezza restituita da Paint.measureText
e Paint.getTextBounds
. measureText
restituisce una larghezza che include il valore di avanzamento del glifo che riempie l'inizio e la fine della stringa. La Rect
larghezza restituita da getTextBounds
non ha questa spaziatura poiché i limiti sono quelli Rect
che avvolgono strettamente il testo.
Esistono in realtà tre modi diversi di misurare il testo.
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)
E 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()
Nota che getTextWidths potrebbe essere utile se stai cercando di determinare quando avvolgere il testo nella riga successiva.
MeasureTextWidth e getTextWidth sono uguali e hanno la larghezza avanzata che misura di cui altri hanno postato. Alcuni considerano questo spazio eccessivo. Tuttavia, questo è molto soggettivo e dipende dal carattere.
Ad esempio, la larghezza dai limiti del testo della misura potrebbe effettivamente sembrare troppo piccola:
Tuttavia, quando si aggiunge un testo aggiuntivo, i limiti per una lettera sembrano normali:
Immagini tratte dalla Guida per sviluppatori Android al disegno su tela personalizzato
Bene, ho fatto in modo diverso:
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());
Spero che questo ti possa aiutare.
Ho usato i metodi measureText () e getTextPath () + computeBounds () e ho creato un Excel con tutti gli attributi di testo per font di dimensioni fisse che puoi trovare in https://github.com/ArminJo/android-blue-display/blob /master/TextWidth.xlsx . Lì troverai anche semplici formule per altri attributi di testo come ascendi ecc.
L' app e la funzione drawFontTest () per generare i valori grezzi utilizzati in Excel sono disponibili anche in questo repository.
puoi usare "textPaint.getTextSize ()" per ottenere la larghezza del testo