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

4

1 に答える 1

1

まず第一に、Sherifのコメントは正しいです:params1のインスタンスであるべきであり、ではFrameLayout.LayoutParamsありませんLinearLayout.LayoutParams
理由は単純です。ll1はFrameLayoutの子であるため、FrameLayoutの子のレイアウトパラメータを取得する必要があります。

2つ目は、 sが属性FrameLayoutに大きく依存していることです。gravityFrameLayoutの子のレイアウトパラメータの新しいインスタンスを作成すると、デフォルト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;
于 2011-11-19T18:27:15.140 に答える