11

データを内部に複製しますか、それともリンクしますViewGroup.addViewか?異なるビューでの複数の呼び出しLayoutParamsで同じインスタンスを再利用できますか?LayoutParamsaddView()

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

おお

答えは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);


}

}

4

2 に答える 2

5

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

これは、実装が変更される可能性があるため、現在の実装が何であっても、より保守的な選択を行う必要があることを意味します。

LayoutParamsしたがって、のインスタンスを別のインスタンスで再利用することは安全ではないと想定する必要がありますViews

私が知る限り、それが価値があることについては、とにかくそれは真実です-ViewGroupコピーを作成しません。

于 2012-05-03T13:51:34.983 に答える
2

これは古い質問ですが、更新された回答があるようです。

LayoutParamsには、別のソースをコピーするためのコンストラクターがあります:http: //developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

ViewGroup.LayoutParams(ViewGroup.LayoutParams source)

これは、再利用しないことをお勧めしますが、必要なものすべてを含む1つのレイアウトパラメータオブジェクトを作成してから、

new LayoutParams(someLayoutParamsToReUse)

私の場合、ボタンのレイアウトパラメータを別のボタンと同じに設定したいと思いました。私は最初に試しました:

button.setLayoutParams(button2.getLayoutParams());

これは機能しませんが、次のようになります。

button.setLayoutParams(new LayoutParms(button2.getLayoutParams))'
于 2014-03-22T15:25:39.673 に答える