ViewGroup.addView
是否将LayoutParams
数据克隆到内部或链接到它?我是否可以重复使用同一个LayoutParams
实例,同时多次调用具有不同视图的addView()
?
apidoc中没有任何内容。
WOW
答案是否定(实验检查):
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 :(得分:5)
apidoc中没有任何内容。
这意味着无论当前的实现是什么,您都需要做出更保守的选择,因为实施可能会发生变化。
因此,您需要假设不重复使用LayoutParams
的实例来与不同的Views
一起使用。
就我所能说的而言,无论如何,这是真的 - ViewGroup
似乎没有复制品。
答案 1 :(得分: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))'