2012-05-03 8 views
10

¿ViewGroup.addView clona LayoutParams datos en el interior o enlaces a él? ¿Puedo reutilizar la misma instancia de LayoutParams con múltiples llamadas al addView() con diferentes vistas?¿Puedo volver a utilizar LayoutPrams con ViewGroup.addView?

No hay nada al respecto en apidoc.

WOW

la respuesta es no (comprobado experimentalmente):

public class SymbolPadActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    RelativeLayout.LayoutParams labelParams; 

    /* 
    * This block to reuse is not working 
    labelParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    labelParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    labelParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
    */ 


    RelativeLayout mover = new RelativeLayout(this); 

    TextView textView; 
    for(int leftMargin = 0; leftMargin<3000; leftMargin += 100) { 
     for(int topMargin=0; topMargin<800; topMargin += 40) { 

      // I can't omit these 3 lines 
      labelParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      labelParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
      labelParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 

      labelParams.leftMargin = leftMargin; 
      labelParams.topMargin = topMargin; 

      textView = new TextView(this); 
      textView.setText("(" + leftMargin + "," + topMargin + ")"); 
      mover.addView(textView, labelParams); 

     } 
    } 




    RelativeLayout.LayoutParams moverParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    moverParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    moverParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
    moverParams.leftMargin = 0; 
    moverParams.topMargin = 0; 

    RelativeLayout stator = new RelativeLayout(this); 
    stator.addView(mover, 0, moverParams); 

    setContentView(stator); 


} 

}

+0

I reutilizado mis params, funcionó! Pero mi vista de cámara deja de funcionar. :/No puedo reutilizar un param en el constructor LayoutParms para crear otro O_O. –

Respuesta

5

No hay nada acerca de ello en apidoc.

Esto significa que debe tomar la decisión más conservadora, independientemente de la implementación actual, ya que la implementación podría cambiar.

Por lo tanto, debe suponer que no se guarda para reutilizar una instancia de LayoutParams para usar con Views diferente.

FWIW, AFAICT, eso es cierto de todos modos - ViewGroup no parece hacer una copia.

1

Ésta es una vieja pregunta, pero no parece ser una respuesta actualizada:

Los LayoutParams tiene un constructor para la copia de otra Fuente: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

ViewGroup.LayoutParams(ViewGroup.LayoutParams source) 

Esto sugeriría que no reutilizar , pero tal vez para crear el objeto 1 diseño params con todo lo necesario, a continuación, sólo llamar

new LayoutParams(someLayoutParamsToReUse) 

En mi caso, quería s et los params de diseño de un botón son lo mismo que otro botón. Yo inicialmente tratado:

button.setLayoutParams(button2.getLayoutParams()); 

Esto no funcionará, sin embargo, esto debe:

button.setLayoutParams(new LayoutParms(button2.getLayoutParams))' 
Cuestiones relacionadas