Java 在Android中为LinearLayout添加边距

Java 在Android中为LinearLayout添加边距,java,android,layoutparams,Java,Android,Layoutparams,我在设置边距方面有一些问题 body_content = (LinearLayout) findViewById(R.id.body_content); int gSLength = 2; body_content.setPadding(10, 0, 10, 0); for (int i = 0; i < 1; i++){ FrameLayout fl = new FrameLayout(this); LayoutParams params = new LayoutPar

我在设置边距方面有一些问题

body_content = (LinearLayout) findViewById(R.id.body_content);

int gSLength = 2;
 body_content.setPadding(10, 0, 10, 0);

for (int i = 0; i < 1; i++){
   FrameLayout fl = new FrameLayout(this);
   LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, 90);
   fl.setLayoutParams(params);

   LinearLayout ll1 = new LinearLayout(this);
   LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 30);
   params1.setMargins(0, 60, 0, 0);
   ll1.setLayoutParams(params1);
   ll1.setBackgroundDrawable(getResources().getDrawable(R.drawable.line_down));
   fl.addView(ll1);

   body_content.addView(fl);
}
body\u content=(LinearLayout)findViewById(R.id.body\u content);
int gSLength=2;
body_content.setPadding(10,0,10,0);
对于(int i=0;i<1;i++){
FrameLayout fl=新的FrameLayout(本);
LayoutParams params=新的LayoutParams(LayoutParams.MATCH_父项,90);
fl.setLayoutParams(参数);
LinearLayout ll1=新的LinearLayout(本);
LinearLayout.LayoutParams参数1=新的LinearLayout.LayoutParams(LayoutParams.MATCH_父项,30);
参数1.设置边距(0,60,0,0);
ll1.setLayoutParams(params1);
ll1.setBackgroundDrawable(getResources().getDrawable(R.drawable.line_down));
fl.addView(ll1);
正文内容添加视图(fl);
}

它不工作
params1.setMargins(0,60,0,0)

首先,谢里夫的评论是正确的:
params1
应该是
FrameLayout.LayoutParams
的实例,而不是
LinearLayout.LayoutParams
原因很简单:
ll1
是FrameLayout的子级,因此它必须为FrameLayout子级获取布局参数

第二件事是
FrameLayout
s严重依赖于
gravity
属性。默认情况下,为FrameLayout子级创建布局参数的新实例时(对于重力场而言,该值无效)。如果子对象的重力设置为-1,则在计算布局时会得到整个边距计算。这意味着任何设置的边距值都将被忽略

那么如何解决这个问题呢?非常简单,在设置边距时为重力设置正确的值:

LinearLayout.LayoutParams params1 = 
                    new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 30);
params1.gravity = Gravity.TOP;
params1.setMargins(0, 60, 0, 0);
这应该行得通。但您对布局尺寸的选择表明您希望将子LinearLayout放置在FrameLayout的底部。这可以通过将重力设置为底部来实现,在这种情况下,您可以跳过设置边距

LinearLayout.LayoutParams params1 = 
                    new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 30);
params1.gravity = Gravity.BOTTOM;

你说它不起作用是什么意思?您是否尝试向父级添加填充?将
params1
的类型从
LinearLayout.LayoutParams
更改为
FrameLayout.LayoutParams
可以使用…params1.leftmarin等,lc2817我的意思是LinearLayout ll1不会崩溃。我不能为父对象填充,因为FrameLayout fl仍然是不需要这些属性的位和块。Udaykiran我尝试了params1.topMargin=60,但也不起作用!