Android 垂直线性布局与WrapContent宽度-使子对象填充到最宽的子对象

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

我想用两个按钮子项创建垂直线性布局,其中每个子项的宽度都是最宽的

但是,根据对子项宽度使用“匹配父项”或“换行”内容的不同,我得到的可能是占用整个屏幕宽度的LinearLayout,也可能是没有填充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_内容。 将每个按钮的宽度称为“匹配父项” 如果不包括红线分隔器视图,则程序应提供预期结果。设置红线分隔符的宽度似乎存在一些问题。作为替代方案,您可以将其声明为线性布局,以使代码完美工作

// 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);