我想与几个LinearLayout
个孩子一起创建垂直Button
,其中每个孩子的宽度最宽。
但是,根据使用MATCH_PARENT
或WRAP_CONTENT
为子宽度,我得到LinearLayout
整个屏幕的宽度,或Buttons
不填充{{1 }}。屏幕截图如下(填充/换行):
示例活动代码:
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
虽然它并不是一种优雅的解决方案 - 这种情况是否有任何预期的机制,我错过了?
答案 0 :(得分:0)
以下是诀窍:
如果您不包含redLineDivider视图,您的程序应该会给您预期的结果。设置redLineDivider的宽度似乎存在一些问题。作为替代方案,您可以将其声明为LinearLayout,以使您的代码完美运行。
// View redLineDivider = new View(this);
// Instead declare it as a LinearLayout
LinearLayout redLineDivider = new LinearLayout(this);
希望这会有用。