在Android中为LinearLayout添加边距

4

我在设置页面边距时遇到了一些问题!

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

它不起作用params1.setMargins(0,60,0,0);


你说它“不工作”,是什么意思?你尝试给父元素添加填充(padding)了吗? - lc2817
ﻣ٠│params1ﻫﻸ▒ﻫ١؛ﻣﻼ┴ﻟ؛└LinearLayout.LayoutParamsﻧ½٩ﻟ٨ﻑFrameLayout.LayoutParamsﻛ°∙ - Sherif elKhatib
也许你可以使用...params1.leftmargin等等。 - Uday
我的意思是LinearLayout ll1不会下降。我不能为父级设置填充,因为FrameLayout fl仍然是不需要这些属性的碎片。 - Kren_DEL
我尝试了params1.topMargin = 60,但它也不起作用! - Kren_DEL
请下次不要使用“你好”和“提前感谢”,删除这些问候语。 - hello_there_andy
1个回答

1
首先,Sherif的评论是正确的:params1 应该是 FrameLayout.LayoutParams 的实例而不是 LinearLayout.LayoutParams
原因很简单: ll1 是 FrameLayout 的子元素,所以它必须采用 FrameLayout 子元素的布局参数。
第二件事是,FrameLayout非常依赖于gravity属性。创建一个新的Layout参数实例时,默认情况下gravity设置为-1(这是一个无效的重力值)。如果子视图的重力设置为-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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接