NioX5199
¿Existe algún método que devuelva el ancho (en píxeles) de un texto que se dibujará en un lienzo de Android usando el método drawText() de acuerdo con la pintura utilizada para dibujarlo?
marc bernstein
has mirado android.graphics.Paint#measureText(String txt)?
-
Gracias esto es! No sé por qué me lo salté. El propósito era simplemente dibujar un texto en el centro de la pantalla. De todos modos, me acabo de dar cuenta de que también podría haber usado setTextAlign (Align.CENTER) en la pintura utilizada para dibujar el texto, cambia el origen especificado al centro del texto dibujado. Gracias.
– NioX5199
15 de julio de 2010 a las 16:17
-
¡Genial, gracias, configurando Align en Paint! ¿Quién hubiera pensado en eso…?
– Sanjay Manohar
5 de agosto de 2011 a las 2:22
-
o puede establecer la Gravedad de la vista de texto en Centro
– yeradis
21 de octubre de 2011 a las 14:38
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
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. los Rect
ancho devuelto por getTextBounds
no tiene este relleno porque los límites son los Rect
que envuelve firmemente el texto.
fuente
En realidad, hay tres formas diferentes de medir el texto.
ObtenerLímites de Texto:
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()
MedirAnchoTexto:
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.
Las medidas MeasureTextWidth y getTextWidth son iguales y tienen el ancho avanzado que mide sobre lo que otros han publicado. Algunos consideran este espacio 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 Guía para desarrolladores de Android sobre dibujos de lienzo personalizados
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á.
armin j
Utilicé los métodos MeasureText() y getTextPath()+computeBounds() y creé un Excel con todos los atributos de texto para fuentes de tamaño fijo que se pueden 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.
los aplicación así como la función dibujarFuentePrueba() para generar los valores sin procesar utilizados en Excel también están disponibles en este repositorio.
Ashish John
puede usar “textPaint.getTextSize ()” para obtener el ancho del texto