我想LinearLayout
用几个Button
孩子创建垂直,每个孩子都有最宽的宽度。
但是,根据使用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));
不过,这感觉不像是优雅的解决方案——对于这种情况,我错过了任何预期的机制吗?