2011-03-23 8 views
8

Digamos que quiero crear múltiples TextViews programáticamente dentro de un diseño relativo. Parece que con cada nuevo TextView también tengo que crear una nueva LayoutParams así:¿Cada vista nueva necesita un nuevo layoutparams?

RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT); 

Luego añadir cualesquiera reglas Quiero usando:

p.addrule(...,...); 

Parece que no puedo usar este único LayoutParams para establecer las reglas para múltiples TextViews. ¿Es esta una afirmación verdadera?

Gracias,

Respuesta

6

Usar el mismo LayoutParams para vistas múltiples está bien, modulo la advertencia de que cambiar los LayoutParams antes de que las vistas hayan pasado por el diseño aplicará los cambios a todas las vistas.

Si solo está buscando guardar código, entonces puede consultar el copy constructor de LayoutParams. Esto le permite crear un nuevo LayoutParams a partir de los datos en otro LayoutParams sin que los dos se refieran a la misma instancia de LayoutParams.

1

Si usted le da los mismos LayoutParams objeto en varias TextViews, compartirán todos los ajustes. Esto significa que si cambia algo en él, el cambio se aplicará a todos los TextViews. En general, querrá usar una instancia diferente para cada TextView.

2

Después de crear y construir la instancia LayoutParams correctos se podría utilizar para cada vista de que los padres:

view1.setLayoutParams(params0); 

Si usted quiere tener copias independientes de params (que desea, creo), puede cambiarlo para:

RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(params0); 
view1.setLayoutParams(params); 
+0

sidenote divertida: que CopyConstructor sólo se copia la altura y anchura, ya que es el ViewGroup.RelativeLayouts CopyConstructor. Por encima de API 19, puede invocar 'new RelativeLayout.LayoutParams ((RelativeLayout.LayoutParams) params0);' tto también para copiar los márgenes y las reglas especificadas. – katzenhut

+0

Mi solución; http://stackoverflow.com/a/29664367/938427 – hungtdo

Cuestiones relacionadas