我想創建垂直LinearLayout
和幾個Button
孩子,其中每個孩子的寬度都是最寬的。帶有WrapContent寬度的垂直LinearLayout - 讓孩子填充到最寬的孩子
但是根據使用MATCH_PARENT
或WRAP_CONTENT
兒童的寬度,我得到任何LinearLayout
考慮整個屏幕的寬度,或Buttons
不充盈LinearLayout
。下面截圖(填充/套):
示例活動碼:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout mainView = new RelativeLayout(this);
mainView.setBackgroundColor(Colors.WHITE);
String[] buttonsNames = new String[] { "Short", "Looooooong", "Medium" };
View buttonsView = getButtonsView(buttonsNames);
mainView.addView(buttonsView, new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT));
setContentView(mainView);
}
private View getButtonsView(String[] buttonNames) {
LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
buttonsView.setBackgroundColor(Colors.BLACK);
for (int i = 0; i < buttonNames.length; i++) {
Button button = new Button(this);
button.setText(buttonNames[i]);
///////////// HERE LAYS THE PROBLEM //////////
buttonsView.addView(button, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
//LinearLayout.LayoutParams.WRAP_CONTENT, // neither of them works
LinearLayout.LayoutParams.WRAP_CONTENT));
View redLineDivider = new View(this);
redLineDivider.setBackgroundColor(Colors.RED);
buttonsView.addView(redLineDivider, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 2));
}
return buttonsView;
}
正如你可以在第二屏幕截圖看到,紅線實際上採取整個寬度不拉伸LinearLayout
- 它是因爲至少有一個視圖設置了寬度。
可能的解決方法我有是要找到最寬的按鈕(最長文本),並使其使用WRAP_CONTENT
,而其餘全部使用MATCH_PARENT
,這給了我預期的結果出來了:
代碼:
buttonsView.addView(button, new LinearLayout.LayoutParams(
isLongestText(i) ? LinearLayout.LayoutParams.WRAP_CONTENT
: LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
雖然它不覺得像優雅的解決方案 - 有沒有這種情況的任何預期的機制,我錯過了?
不是我所知道的。你將不得不做一些內部計算,或者如果你知道哪一個是最長的,你可以使用RelativeLayout結構的對齊功能來嘗試和通過XML對齊它們。 –