Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


GetMeasuredHeight () de TextView con el texto incluido

Estoy tratando de determinar la altura de un TextView antes de que se dibuja. Estoy usando el siguiente código para hacer eso:

 TextView textView = (TextView) findViewById(R.id.textview); textView.setText("TEST"); int widthSpec = MeasureSpec.makeMeasureSpec(LayoutParams.MATCH_PARENT, MeasureSpec.EXACTLY); int heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); textView.measure(widthSpec, heightSpec); System.out.println("MeasuredHeight: " + textView.getMeasuredHeight()); 

La salida es MeasuredHeight: 28 . Nada de malo con eso.

Sin embargo, cuando le doy a TextView una cadena de texto largo, para que se produzca el TextView , todavía da la altura de una sola línea en lugar de dos:

 (...) textView.setText("TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST"); (...) 

La salida es MeasuredHeight: 28 , donde yo esperaría MeasuredHeight: 56 .

¿Por qué no me da el valor correcto y cómo puedo lograr el valor correcto?

  • ¿Cómo configurar AutoCompleteTextView desplegable fondo transparente en Android?
  • Android getMeasuredHeight devuelve valores erróneos!
  • Cómo tener una imagen más amplia desplazándose en el fondo
  • Mostrar texto dinámico en una vista de Android
  • ContentDescription = "@ null" una mala idea?
  • CreateBitmap - java.lang.IllegalArgumentException: x debe ser <bitmap.width ()
  • Cambiar el color de fondo del elemento seleccionado en un ListView
  • Estilo de fila ListView: texto alineado a la izquierda e icono alineado a la derecha
  • 3 Solutions collect form web for “GetMeasuredHeight () de TextView con el texto incluido”

    Este es un método onCreate. La jerarquía de toda la vista aún no se ha medido ni configurado. Así que el padre de textView no sabe su ancho. Es por eso que las dimensiones de textView no están limitadas por sus dimensiones de los padres.

    Trate de cambiar su línea a:

     int widthSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY); 

    Por lo que su ancho de texto es igual a 200 píxeles.

    Si usted explica por qué necesita la altura de textview tal vez podamos ayudarle.

    Sí, recientemente me topé con esto. La mejor manera es crear un objeto ViewTreeObserver y registrar un ViewTreeObserver.OnGlobalLayoutListener. Esto se llamará después de la fase de diseño y antes de la fase de dibujo. Podrá obtener el tamaño de su TextView en ese momento.

    Eso no será estrictamente el texto en sí, sino para todo el TextView. Si hay relleno interno, el texto real será más pequeño que TextView.

    Si realmente necesita las dimensiones del texto real, use textView.getLayout() para obtener el objeto Layout para el texto y, a continuación, use layout.getHeight ().

    Tienes que crear Custom Textview y usarlo en tus diseños y usar la función de altura getActual para establecer la altura en tiempo de ejecución

      public class TextViewHeightPlus extends TextView { private static final String TAG = "TextViewHeightPlus"; private int actualHeight=0; public int getActualHeight() { return actualHeight; } public TextViewHeightPlus(Context context) { super(context); } public TextViewHeightPlus(Context context, AttributeSet attrs) { super(context, attrs); setCustomFont(context, attrs); } public TextViewHeightPlus(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); actualHeight=0; actualHeight=(int) ((getLineCount()-1)*getTextSize()); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.