我想创建垂直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对齐它们。 –