我在设置边距时遇到了一些问题!
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);
最佳答案
首先,Sherif 的评论是正确的:params1
应该是 FrameLayout.LayoutParams
而不是 LinearLayout.LayoutParams
的实例。
原因很简单:ll1
是 FrameLayout 的子级,因此它必须采用 FrameLayout 子级的布局参数。
第二件事是 FrameLayout
严重依赖于 gravity
属性。为 FrameLayout 子项创建布局参数的新实例时,gravity
is set to -1
默认情况下(这是一个无效的重力值)。如果 child 的重力设置为-1,则整个边距计算得到skipped。在计算布局时。这意味着任何设置的 margin 值都会被忽略。
那怎么解决呢?很简单,在设置边距时为重力设置一个正确的值:
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;
关于java - 在 Android 中为 LinearLayout 添加边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154716/