2012-04-08 124 views
1

我想動態創建4個RelativeLayout,以便每個後續佈局放置在前一個佈局的下方。我試圖做這個白色的這段代碼:動態設置佈局的位置

RelativeLayout layoutParent = (RelativeLayout)findViewById(R.id.layoutParent); 
    int layouts = 4; 

     int dp15 = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, getResources().getDisplayMetrics()); 

     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
      params.setMargins(dp15, dp15, dp15, dp15); 


     for (int l = 0; l <= layouts; l++) 
     { 
      RelativeLayout queueLayout = new RelativeLayout(getApplicationContext()); 
      TextView one = new TextView(getApplicationContext()); 
      one.setText(String.valueOf(l)); 
      queueLayout.setId(2000 + l); 
      if (l != 0) params.addRule(RelativeLayout.BELOW, queueLayout.getId() - 1); 
      queueLayout.addView(one, params); 
      layoutParent.addView(queueLayout); 
     } 

但我無法得到每個佈局的理想位置。有人能告訴我,我該怎麼做我想做的事情?

預先感謝您!

回答

2

您設置了BELLOW規則,但在將父子代碼RelativeLayout添加到父佈局時不會使用它(如MisterSquonk所述)。還可以使用另一套LayoutParams爲孩子RelativeLayout

for (int l = 0; l <= layouts; l++) { 
     RelativeLayout queueLayout = new RelativeLayout(getApplicationContext()); 
     TextView one = new TextView(getApplicationContext()); 
     one.setText(String.valueOf(l)); 
     queueLayout.setId(2000 + l); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     if (l != 0) lp.addRule(RelativeLayout.BELOW, queueLayout.getId() - 1); 
     queueLayout.addView(one, params); 
     layoutParent.addView(queueLayout, lp); 
    } 
+0

我試着做你說什麼,但同樣的結果... – 2012-04-08 18:45:50

+0

@KrLx_roller做了'TextView's重疊? – Luksprog 2012-04-08 18:46:57

+0

是的,這就是每次執行應用程序時發生的事情 – 2012-04-08 18:56:10