2011-11-16 152 views
4

我在設置保證金時遇到了一些問題!在Android中爲LinearLayout添加保證金

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

+0

你是什麼意思,它不工作?你有沒有嘗試向父母添加填充? – lc2817

+0

從'LinearLayout.LayoutParams'改變'params1'的類型爲'FrameLayout.LayoutParams' –

+0

也許你可以使用... params1.leftmarin等.., – Udaykiran

回答

1

首先,謝里夫的評論是正確的:params1應該是FrameLayout.LayoutParams而不是LinearLayout.LayoutParams一個實例。
原因很簡單:ll1是FrameLayout的子元素,所以它必須爲FrameLayout子元素使用佈局參數。

第二件事是FrameLayout s很大程度上取決於gravity屬性。爲FrameLayout子項創建佈局參數的新實例時,默認情況下爲gravity is set to -1(對於重力而言,這是一個無效值)。如果孩子的重力設置爲-1,則在計算佈局時,整個保證金計算將獲得skipped。這意味着任何設定的保證金值將被忽略。

那麼如何解決?很簡單,在設置邊距時爲重力設置正確的值:

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;