Android 垂直线性布局与WrapContent宽度-使子对象填充到最宽的子对象
我想用两个按钮子项创建垂直线性布局,其中每个子项的宽度都是最宽的 但是,根据对子项宽度使用“匹配父项”或“换行”内容的不同,我得到的可能是占用整个屏幕宽度的LinearLayout,也可能是没有填充LinearLayout的按钮。填充/包裹下面的屏幕截图: 活动代码示例:Android 垂直线性布局与WrapContent宽度-使子对象填充到最宽的子对象,android,android-layout,android-linearlayout,fill-parent,Android,Android Layout,Android Linearlayout,Fill Parent,我想用两个按钮子项创建垂直线性布局,其中每个子项的宽度都是最宽的 但是,根据对子项宽度使用“匹配父项”或“换行”内容的不同,我得到的可能是占用整个屏幕宽度的LinearLayout,也可能是没有填充LinearLayout的按钮。填充/包裹下面的屏幕截图: 活动代码示例: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Relati
@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_内容。 将每个按钮的宽度称为“匹配父项” 如果不包括红线分隔器视图,则程序应提供预期结果。设置红线分隔符的宽度似乎存在一些问题。作为替代方案,您可以将其声明为线性布局,以使代码完美工作
// View redLineDivider = new View(this);
// Instead declare it as a LinearLayout
LinearLayout redLineDivider = new LinearLayout(this);
希望这会有用。据我所知不是这样。您必须进行一些内部计算,或者如果您知道哪一个是最长的,您可以使用RelativeLayout结构的对齐功能来尝试通过XML对齐它们。
// View redLineDivider = new View(this);
// Instead declare it as a LinearLayout
LinearLayout redLineDivider = new LinearLayout(this);