1、在xml视图文件中设置好布局后,在代码中inflate出来通过addView到其他布局中,当父级布局与子布局不一样时,发现在视图中设置的布局(如,margin、width等)都没有生效。
原因是:android的布局是根据父级组件来得LayoutParams定义的,如下代码
// 当执行如下代码,会发现child视图文件中定义的布局属性没有生效
// child:RelativeLayout
// parent:LinearLayout
View child = View.inflate(mCtx, R.layout.child, null);parent.addView(child);
// 需要在代码中通过父级组件的LayoutParams设置child的布局属性,如下上面代码改成
View child = View.inflate(mCtx, R.layout.child, null);
// 父级组件的LayoutParams
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(200, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(20, 20, 20, 0);
child.setParams(params);
parent.addView(child);
// 这样才能设置子视图的layout布局