Respuestas:
¿Has mirado 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();
Respuesta suplementaria
Hay una ligera diferencia entre el ancho devuelto por Paint.measureText
y Paint.getTextBounds
. measureText
devuelve un ancho que incluye el valor advanceX del glifo rellenando el principio y el final de la cadena. El Rect
ancho devuelto por getTextBounds
no tiene este relleno porque los límites son los Rect
que ajustan firmemente el texto.
En realidad, hay tres formas diferentes de medir el texto.
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)
Y 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()
Tenga en cuenta que getTextWidths podría ser útil si está tratando de determinar cuándo ajustar el texto a la siguiente línea.
MeasureTextWidth y getTextWidth son iguales y tienen el ancho avanzado que miden sobre el que otros han publicado. Algunos consideran que este espacio es excesivo. Sin embargo, esto es muy subjetivo y depende de la fuente.
Por ejemplo, el ancho de los límites del texto de medida puede parecer demasiado pequeño:
Sin embargo, al agregar un texto adicional, los límites de una letra parecen normales:
Imágenes tomadas de la Guía de desarrolladores de Android para el dibujo de lienzo personalizado
Bueno, lo he hecho de otra manera:
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());
Espero que esto te ayudará.
Usé los métodos measureText () y getTextPath () + computeBounds () y construí un Excel con todos los atributos de texto para la fuente de tamaño fijo que se puede encontrar en https://github.com/ArminJo/android-blue-display/blob /master/TextWidth.xlsx . Allí encontrará también fórmulas simples para otros atributos de texto como ascender, etc.
La aplicación , así como la función drawFontTest () para generar los valores sin procesar utilizados en Excel también están disponibles en este repositorio.
puedes usar "textPaint.getTextSize ()" para obtener el ancho del texto