2015-03-25 49 views
0

我正在嘗試以編程方式構建線性佈局,其中,所有按鈕都有4個,每個按鈕都位於上一個按鈕的下方。就像圖爲如下:Android - 如何以編程方式在LinearLayout中添加多個帶有不同layout_margins的按鈕?

enter image description here

正如你可以從上面的圖片中看到,每個按鈕具有完全相同的大小,但它們具有不同的layout_margins,第一個按鈕在layout_marginTop而一個較大的值其他3個按鈕在layout_marginTop中具有相同的值。

基本上用xml構建這樣的佈局非常簡單,但現在我真的遇到了只有通過java代碼才能構建所有這些的困難。我已經經歷了許多帖子,現在我可以輕鬆地添加4個按鈕,但是我無法找到以編程方式爲每個按鈕設置layout_margin的正確方法。

要簡單的添加四個按鈕,我可以這樣做:

public class mainActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    LinearLayout layout = new LinearLayout(this); 
    layout.setOrientation(LinearLayout.VERTICAL); //Can also be done in xml by android:orientation="vertical" 

    for (int i = 0; i < 3; i++) { 
     LinearLayout row = new LinearLayout(this); 
     row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 

     for (int j = 0; j < 4; j++) { 
      Button btnTag = new Button(this); 
      btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      btnTag.setText("Button " + (j + 1 + (i * 4))); 
      btnTag.setId(j + 1 + (i * 4)); 
      row.addView(btnTag); 
     } 

     layout.addView(row); 
    } 
    setContentView(layout); 
    //setContentView(R.layout.main); 
} 
} 

並以編程方式設置頁邊距爲每個按鈕(視圖),我可以這樣做:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
params.setMargins(0, 2, 0, 0); 
button.setLayoutParams(params); 

但在這裏出現這個問題:只要我爲4個按鈕設置了LayoutsParams,然後通過「addView(button)」將4個按鈕添加到Linearlayout中,則只有第一個按鈕可以以適當的邊距顯示爲合適的大小。所有其他3個按鈕都消失了。而對於很多測試,我發現似乎在一個linearlayout對象中只允許有一個layoutParams。因此,只要我爲不同的按鈕設置不同的佈局參數,只能顯示第一個按鈕。但因爲這裏我的4個按鈕的邊緣參數是絕對不同的,因此我認爲我必須爲不同的按鈕使用不同的layoutparams。

所以,請任何人告訴我,我怎樣才能以編程方式爲我的每個按鈕設置邊距並使其正確顯示?這已經吸了我兩天的生活,請幫助! :)

+0

請不要在您的問題標題前添加標記名稱,如* Android - *(底部的標記足以提及問題的目標)。如果您希望按列表形式的按鈕,您是否也將垂直方向設置爲您在for循環中構建的LinearLayouts? – Luksprog 2015-03-25 05:55:08

+0

感謝您的建議。下次我不會使用Android作爲標題,就這個例子而言,我只是將它用作演示如何將按鈕添加到linearlayout中。對於我的情況,我其實不需要構建3個視圖,每個視圖都帶有4個按鈕,我只需要構建一個視圖,其中包含4個按鈕。此外,我希望能夠以編程方式爲每個按鈕設置邊距。 :) – jinnancun 2015-03-25 06:52:35

回答

3
 linear = (LinearLayout) rootView.findViewById(R.id.linear); 
    . 
    . 
    . 

    RelativeLayout.LayoutParams layoutParam = new RelativeLayout.LayoutParams(
          RelativeLayout.LayoutParams.MATCH_PARENT, 
          RelativeLayout.LayoutParams.WRAP_CONTENT); 
        LinearLayout layout = new LinearLayout(getActivity()); 
        layout.setLayoutParams(layoutParam); 
        layout.setOrientation(LinearLayout.VERTICAL); 

        // Below will add three linear layout with 4 buttons in each 
        for (int i = 0; i < 3; i++) { 
         LinearLayout row = new LinearLayout(getActivity()); 
         row.setLayoutParams(new LinearLayout.LayoutParams(
           LinearLayout.LayoutParams.MATCH_PARENT, 
           LinearLayout.LayoutParams.WRAP_CONTENT)); 
//Here is important 
         row.setOrientation(LinearLayout.VERTICAL); 

         for (int j = 0; j < 4; j++) { 
          Button btnTag = new Button(getActivity()); 
          btnTag.setLayoutParams(new LayoutParams(
            LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT)); 
          btnTag.setText("Button " + (j + 1 + (i * 4))); 
          btnTag.setId(j + 1 + (i * 4)); 
          row.addView(btnTag); 
         } 
         layout.addView(row); 
        } 
        linear.addView(layout); 
        // You can set also 
        // setContentView(layout) 
+0

嗨Anand,謝謝你的代碼示例。其實我已經在我的代碼中正確設置了方向,但它仍然不起作用。似乎只有一個layoutparams被允許在一個線性佈局中,但我認爲這可能是錯誤的。可能還有其他方法可以將不同的佈局分區放入佈局中。但我仍然沒有發現它.. – jinnancun 2015-04-01 04:40:12

相關問題