Establecer ancho en wrap_content para TextView a través del código

3 minutos de lectura

avatar de usuario
Android_programmer_cámara

¿Alguien puede ayudarme a configurar el ancho de TextView a wrap_content a través de código y no de XML?

Estoy creando dinámicamente un TextView en el código, ¿hay alguna forma de establecer su ancho en wrap_content a través de código?

avatar de usuario
Franco

TextView pf = new TextView(context);
pf.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

Para diferentes diseños como ConstraintLayout y otros, tienen los suyos LayoutParamsal igual que:

pf.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

o

parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

  • android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

    –Francisco Corrales Morales

    31 de diciembre de 2014 a las 14:37


  • bueno, la diferencia principal es que en el primer código estamos creando un nuevo TextView con esa configuración ya. En el segundo, estamos agregando a una vista existente y también estamos configurando esos parámetros. Para el problema del reparto, creo que debes emitir la clase adecuada.

    – Franco

    31 de diciembre de 2014 a las 14:38


Hay otra manera de lograr el mismo resultado. En caso de que necesite establecer solo un parámetro, por ejemplo, ‘altura’:

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);

  • Esto funciona muy bien. Si esto se hace en LinearLayout no parece que ll.invalidate() es necesario. ¿Por qué?

    – midiwriter

    11/09/2016 a las 17:33


  • Supongo que nunca lo sabremos

    – Denny

    1 oct 2018 a las 23:20

avatar de usuario
Linh

Solución para el cambio TextView ancho a resumir contenido.

textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 
textView.requestLayout();  
// Call requestLayout() for redraw your TextView when your TextView is already drawn (laid out) (eg: you update TextView width when click a Button). 
// If your TextView is drawing you may not need requestLayout() (eg: you change TextView width inside onCreate()). However if you call it, it still working well => for easy: always use requestLayout()

// Another useful example
// textView.getLayoutParams().width = 200; // For change `TextView` width to 200 pixel

  • Solución simple y correcta, porque no anula otros parámetros.

    – CoolMind

    16 de febrero de 2017 a las 9:48

  • Marqué mi respuesta para eliminar ya que esto es mucho más simple.

    – FrankKrumnow

    26 de julio de 2017 a las 7:16

  • Esta es la mejor solución

    – Pedram Shabani

    1 oct 2017 a las 16:42

Una pequeña actualización en esta publicación: si está utilizando ktx dentro de su proyecto de Android, hay un pequeño método de ayuda que facilita mucho la actualización de LayoutParams.

Si desea actualizar, por ejemplo, solo el ancho, puede hacerlo con la siguiente línea en Kotlin.

tv.updateLayoutParams { width = WRAP_CONTENT }

Estoy publicando el texto de edición de múltiples líneas base Java de Android.

EditText editText = findViewById(R.id.editText);/* edittext access */

ViewGroup.LayoutParams params  =  editText.getLayoutParams(); 
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
editText.setLayoutParams(params); /* Gives as much height for multi line*/

editText.setSingleLine(false); /* Makes it Multi line */

avatar de usuario
DeVYaGhI

Creo que este código responde a tu pregunta.

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);

¿Ha sido útil esta solución?