texto tamaño studio plain personalizar obtener mostrar letra eventos español edittext datos cambiar caja android android-layout android-canvas android-view android-textview

android - studio - Cómo medir la altura de TextView en función del ancho del dispositivo y el tamaño de la fuente?



plain text android studio (3)

Estoy buscando un método en Android que tome una entrada (texto, tamaño_foto_de_texto, ancho_de_dispositivo) y, basándose en estos cálculos, devolverá la altura requerida para mostrar un texto en particular.

Estoy configurando un runtime de vista de texto / altura web basado en su contenido, conozco el contenido de warp pero no puedo usarlo en mi caso debido a algún problema de altura mínima en la vista web.

Así que estoy tratando de calcular la altura y en función de eso estoy configurando la altura de la vista.

Lo he intentado con las siguientes maneras

Paint paint = new Paint(); paint.setTextSize(text.length()); Rect bounds = new Rect(); paint.getTextBounds(text, 0, 1, bounds); mTextViewHeight= bounds.height();

Entonces el resultado es

1) "Hello World" devuelve un alto de 13 para fuente 15

2) "La última versión de Jelly Bean está aquí, con optimizaciones de rendimiento" devuelve una altura de 16 para la fuente 15

Entonces lo he intentado con

Paint paint = new Paint(); paint.setTextSize(15); paint.setTypeface(Typeface.SANS_SERIF); paint.setColor(Color.BLACK); Rect bounds = new Rect(); paint.getTextBounds(text, 0, text.length(), result); Paint.FontMetrics metrics = brush.getFontMetrics(); int totalHeight = (int) (metrics.descent - metrics.ascent + metrics.leading);

Entonces el resultado es

1) "Hello World" devuelve una altura de 17 para la fuente 15

2) "La última versión de Jelly Bean está aquí, con optimizaciones de rendimiento" devuelve una altura de 17 para la fuente 15

si establezco estos valores a mi vista, entonces está cortando texto, no muestra todo el contenido.

Nuevamente se ve bien en algunas mesas ya que tiene un ancho grande pero no en el teléfono.

¿Hay alguna manera de calcular la altura en función del contenido?


Tengo un método más fácil para saber la altura real de una línea antes de ser pintada, no sé si esto los ayudará a ustedes, pero mi solución para obtener la altura de una línea es independiente de la altura del diseño, solo tome las métricas de fuentes de esta manera:

myTextView.getPaint().getFontMetrics().bottom - myTextView.getPaint().getFontMetrics().top)

con eso obtenemos la altura real que las fuentes tomarán de la vista de texto para pintar. Esto no le da un int, pero puede hacer un Math.round para obtener un valor cercano.


Paint.getTextBounds() no devuelve lo que cabría esperar. Los detalles estan here

En cambio, puedes intentarlo de esta manera:

int mMeasuredHeight = (new StaticLayout(mMeasuredText, mPaint, targetWidth, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, true)).getHeight();


public static int getHeight(Context context, String text, int textSize, int deviceWidth) { TextView textView = new TextView(context); textView.setText(text); textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); int widthMeasureSpec = MeasureSpec.makeMeasureSpec(deviceWidth, MeasureSpec.AT_MOST); int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); textView.measure(widthMeasureSpec, heightMeasureSpec); return textView.getMeasuredHeight(); }

Si textSize no se proporciona en píxeles, cambie el primer parámetro de setTextSize() .