2012-05-03 10 views
10

ViewGroup.addViewクローンLayoutParams内部のデータまたはそれにリンクしていますか? LayoutParamsの同じインスタンスを別のビューのaddView()への複数の呼び出しで再利用できますか?LayoutPramsをViewGroup.addViewに再利用できますか?

apidocには何もありません。

WOW

答えは(実験的に確認)NOである:

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

は私のparamsを再利用し、それが働きました!しかし私のカメラビューは機能しなくなりました。 :/別のO_Oを作成するために、LayoutParmsコンストラクタのparamを再利用することすらできません。 –

答えて

5

それについて何もapidocではありません。

これは、実装が変更される可能性があるため、現在の実装に関係なく、より控えめな選択をする必要があることを意味します。

したがって、別のViewsで使用するためにLayoutParamsのインスタンスを再利用することは保存されていないと仮定する必要があります。

FWIW、AFAICT、とにかくtrue - ViewGroupはコピーを作成していません。

1

これは古い質問ですが、更新の答えがあるように思われる:

LayoutParamsは別の ソースをコピーするためのコンストラクタを持っていますhttp://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

ViewGroup.LayoutParams(ViewGroup.LayoutParams source) 

これはいない再利用することをお勧めそれが、おそらくちょうど私の場合は

new LayoutParams(someLayoutParamsToReUse) 

を呼び出して、あなたが必要なすべてで1つのレイアウトのparamsオブジェクトを作成するために、私はSに望んでいましたボタンのレイアウトパラメータは別のボタンと同じになります。しかし、これはすべき、

button.setLayoutParams(button2.getLayoutParams()); 

これは動作しません:私が最初に試した

button.setLayoutParams(new LayoutParms(button2.getLayoutParams))' 
関連する問題