我正在嘗試以編程方式構建線性佈局,其中,所有按鈕都有4個,每個按鈕都位於上一個按鈕的下方。就像圖爲如下:Android - 如何以編程方式在LinearLayout中添加多個帶有不同layout_margins的按鈕?
正如你可以從上面的圖片中看到,每個按鈕具有完全相同的大小,但它們具有不同的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。
所以,請任何人告訴我,我怎樣才能以編程方式爲我的每個按鈕設置邊距並使其正確顯示?這已經吸了我兩天的生活,請幫助! :)
請不要在您的問題標題前添加標記名稱,如* Android - *(底部的標記足以提及問題的目標)。如果您希望按列表形式的按鈕,您是否也將垂直方向設置爲您在for循環中構建的LinearLayouts? – Luksprog 2015-03-25 05:55:08
感謝您的建議。下次我不會使用Android作爲標題,就這個例子而言,我只是將它用作演示如何將按鈕添加到linearlayout中。對於我的情況,我其實不需要構建3個視圖,每個視圖都帶有4個按鈕,我只需要構建一個視圖,其中包含4個按鈕。此外,我希望能夠以編程方式爲每個按鈕設置邊距。 :) – jinnancun 2015-03-25 06:52:35