2012-05-03 15 views
10

ViewGroup.addView cloni LayoutParams dati all'interno o collegamenti ad esso? Posso riutilizzare la stessa istanza di LayoutParams con più chiamate a addView() con diverse visualizzazioni?Posso riutilizzare LayoutPram con ViewGroup.addView?

Non c'è niente a riguardo in apidoc.

WOW

la risposta è no (controllato sperimentalmente):

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

ho riutilizzato miei params, ha funzionato! Ma la mia videocamera non funziona più. :/Non riesco nemmeno a riutilizzare un parametro nel costruttore di LayoutParm per crearne un altro O_O. –

risposta

5

Non c'è nulla su di esso in apidoc.

Ciò significa che è necessario effettuare la scelta più prudente, indipendentemente dall'attuale implementazione, poiché l'implementazione potrebbe cambiare.

Di conseguenza, è necessario presumere che non è possibile salvare un'istanza di LayoutParams per l'utilizzo con diverso Views.

FWIW, AFAICT, è vero comunque - ViewGroup non sembra fare una copia.

1

Questa è una vecchia questione, ma sembra che ci sia una risposta aggiornata:

Le LayoutParams ha un costruttore per la copia di un altro Fonte: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

ViewGroup.LayoutParams(ViewGroup.LayoutParams source) 

Ciò suggerirebbe di non ri-uso si, ma forse creare l'oggetto 1 layout di params con tutto il necessario, quindi basta chiamare

new LayoutParams(someLayoutParamsToReUse) 

Nel mio caso, ho voluto s i parametri di layout di un pulsante sono gli stessi di un altro pulsante. Inizialmente ho provato:

button.setLayoutParams(button2.getLayoutParams()); 

Questo non funziona, tuttavia questo dovrebbe:

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