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


92

Puede alguien ayudarme a cómo configurar el ancho de TextViewa wrap_contenttravés de código y no de XML?

Estoy creando dinámicamente un TextViewcódigo en, entonces, ¿hay alguna forma de establecer su ancho a wrap_contenttravés del código?

Respuestas:


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

Para diferentes diseños como ConstraintLayouty otros, tienen los suyos propios LayoutParams, así:

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));

8
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
Francisco Corrales Morales

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 elenco, creo que debes lanzar la clase adecuada
Franco

78

Hay otra forma de lograr el mismo resultado. En caso de que necesite configurar 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 LinearLayout, no parece que ll.invalidate()sea ​​necesario. ¿Por qué?
midiwriter

1
Supongo que nunca lo sabremos
Denny

49

Solución para cambiar el TextViewancho para envolver 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

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

2
Marqué mi respuesta para eliminarla ya que esto es mucho más simple.
FrankKrumnow

2
Esta es la mejor solución
pedram shabani

4

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

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 */

1

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);

0

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 hace que la actualización de LayoutParams sea mucho más fácil.

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

tv.updateLayoutParams { width = WRAP_CONTENT }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.