我可以重新使用ViewGroup.addView的LayoutPrams?

ViewGroup.addView是否将LayoutParams数据克隆到内部或链接到它? 我可以重复使用相同的LayoutParams实例与多个调用addView()与不同的意见?

在apidoc中没有什么关于它的。

答案是否定的(实验检查):

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

}

Solutions Collecting From Web of "我可以重新使用ViewGroup.addView的LayoutPrams?"

在apidoc中没有什么关于它的。

这意味着无论目前的实施情况如何,您都需要做出更加保守的select,因为实施可能会发生变化。

因此,您需要假设重复使用LayoutParams一个实例以用于不同的Views是不保存的。

FWIW,AFAICT,无论如何这是真的 – ViewGroup似乎没有复制。

这是一个老问题,但似乎有一个更新的答案:

LayoutParams有一个构造函数用于复制另一个Source: http : //developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

 ViewGroup.LayoutParams(ViewGroup.LayoutParams source) 

这将build议不要重复使用它,但也许创build1个布局params对象与你需要的一切,然后只是调用

 new LayoutParams(someLayoutParamsToReUse) 

在我的情况下,我想将一个button的布局参数设置为与另一个button相同。 我最初尝试:

 button.setLayoutParams(button2.getLayoutParams()); 

这不会工作,但是这应该:

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