¿Puedo reutilizar LayoutPrams con ViewGroup.addView?

¿Afecta la regulación de la ViewGroup.addView los clones LayoutParams datos en el interior o enlaces a él? ¿Puedo reutilizar la misma instancia de LayoutParams con múltiples llamadas a addView() con diferentes puntos de vista?

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


}

}

preguntado el 03 de mayo de 12 a las 14:05

Reutilicé mis parámetros, ¡funcionó! Pero mi cámara deja de funcionar. :/ Ni siquiera puedo reutilizar un parámetro en el constructor LayoutParms para crear otro O_O. -

2 Respuestas

No hay nada al respecto en apidoc.

Esto significa que debe tomar la decisión más conservadora, sin importar cuál sea la implementación actual, ya que la implementación podría cambiar.

Por lo tanto, debe asumir que no es seguro reutilizar una instancia de LayoutParams con diferente Views.

Por lo que vale, por lo que puedo decir, eso es cierto de todos modos - ViewGroup no hace una copia.

Respondido 10 Oct 19, 10:10

Esta es una vieja pregunta, pero parece haber una respuesta actualizada:

LayoutParams tiene un constructor para copiar otra fuente: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

ViewGroup.LayoutParams(ViewGroup.LayoutParams source)

Esto sugeriría no reutilizarlo, pero tal vez crear 1 objeto de parámetros de diseño con todo lo que necesita, luego simplemente llame

new LayoutParams(someLayoutParamsToReUse)

En mi caso, quería configurar los parámetros de diseño de un botón para que fueran iguales a los de otro botón. Inicialmente intenté:

button.setLayoutParams(button2.getLayoutParams());

Esto no funcionará, sin embargo, esto debería:

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

respondido 22 mar '14, 15:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.